전 완전히 할당되지 않도록 위임장으로 라이브러리를 다시 작성합니다. 목표는 앱의 시작 단계가 완료된 후 0 개의 컬렉션을 유지하는 것입니다. 내가 문자열을 할당하는 것으로 판단Ascii Bytes Array Int32 또는 Double
Int32 foo = Int32.Parse(ASCIIEncoding.ASCII.GetString(bytes, start, length));
:
이전에는이 같은 전화가 많이있었습니다. 나는 자동으로 똑같은 일을 할 C# 라이브러리 함수를 찾을 수 없었다. BitConverter 클래스를 살펴 보았지만, Int32가 실제로 나타내는 바이트로 인코딩 된 경우 인 것 같습니다. 여기에 Int32를 나타내는 Ascii 문자를 나타내는 바이트 배열이 있습니다.
는 여기에 내가
이public static Int32 AsciiBytesToInt32(byte[] bytes, int start, int length)
{
Int32 Temp = 0;
Int32 Result = 0;
Int32 j = 1;
for (int i = start + length - 1; i >= start; i--)
{
Temp = ((Int32)bytes[i]) - 48;
if (Temp < 0 || Temp > 9)
{
throw new Exception("Bytes In AsciiBytesToInt32 Are Not An Int32");
}
Result += Temp * j;
j *= 10;
}
return Result;
}
이
사람이 이미 더 최적의 방법으로이 작업을 수행 C#을 라이브러리 함수를 알고 있나요 무슨 짓을했는지? 또는 위의 실행 속도를 향상시키기위한 개선 사항 (아마 하루 중 수백만 번 호출 될 것입니다). 감사!
전통적인 코드보다 관리 코드를 우월하게 만드는 것이 있다면 메모리 할당 비용이 매우 저렴합니다. 의도적으로 그것을 피하는 것은 올림픽스에서 경쟁하기 위하여 당신의 왼발을 떨어져 불기 같이이다. –
메모리 할당이 저렴합니다. 가비지 콜렉션은 그렇지 않습니다. 엄청난 양의 쓰레기를 만들면 일반적으로 피해야 할 가치가있는 Gen2 힙에 상대적으로 수명이 짧은 개체를 넣을 수 있습니다. – Gabe
동의. 우리는 콜렉션을 줄이려고합니다. 우리는 100ms까지 걸리는 Gen2 컬렉션을 볼 수 있습니다. 이 짧은 문자열은 큰 문제가 아니며 꽤 빨리 수집해야합니다. 그러나 그들은 그다지 제거하기가 어렵지 않습니다. 또한 앱의 지속적인 운영 단계에서 할당이 없다고 말하면 실제 할당량이 어디에서 오는지 쉽게 추적 할 수 있습니다. –