우리는 나는 다음과 같은 방법에 제공된 프로파일 우리의 프로젝트와 함께 약간의 성능 최적화를하고있다 :이 방법은 ~ 1μs의 실행 당과 꽤 빨리 이미바이트 파싱을 빠르게 할 수 있습니까?
private int CalculateAdcValues(byte lowIndex)
{
byte middleIndex = (byte)(lowIndex + 1);
byte highIndex = (byte)(lowIndex + 2);
// samples is a byte[]
retrun (int)((int)(samples[highIndex] << 24)
+ (int)(samples[middleIndex] << 16) + (int)(samples[lowIndex] << 8));
}
하지만 초당 ~ 100.000 배라고합니다 따라서 CPU의 10 %를 차지합니다.
누구나이 방법을 개선하는 방법에 대해 알고 있습니까?
편집 :
현재 솔루션 :
fixed (byte* p = samples)
{
for (; loopIndex < 61; loopIndex += 3)
{
adcValues[k++] = *((int*)(p + loopIndex)) << 8;
}
}
이 그 전에 시간의 < 40 %를 소요 (지금은 전에 호출 당 "전체 방법"했다 ~ 35μs와 ~ 13μs) . actualy 이제 다음 calcualtion 더 많은 시간이 소요 -loop for
...
왜 캐스트'byte'에? 인덱스 mod 256을 줄여야합니까? 'int'로의 캐스트는 이미 값을 int로 확장했기 때문에 쓸모가 없습니다. – CodesInChaos