제공된 배열을 정렬하는 작은 조각의 코드를 작업하고 있습니다. 배열은 가능한 한 빨리 정렬되어야합니다. 무작위 화가 그다지 중요하지 않습니다. 방법을 프로파일 링 한 후에 가장 큰 돼지는 Random.Next
이라는 것을 알게되었습니다. 어느 것이 메소드 실행 시간의 약 70 %를 차지합니다. 더 빠른 무작위 제너레이터를 온라인으로 검색 한 후에는 향상된 성능을 제공하는 플러그 앤 플레이 라이브러리가 없습니다.Random.Nex (int)에 배열 병목 현상을 섞으십시오.
그래서이 코드의 성능을 더 향상시킬 수있는 방법이 있는지 궁금합니다.
[MethodImpl(MethodImplOptions.NoInlining)]
private static void Shuffle(byte[] chars)
{
for (var i = 0; i < chars.Length; i++)
{
var index = rnd.Next(chars.Length);
byte tmpStore = chars[index];
chars[index] = chars[i];
chars[i] = tmpStore;
}
}
먼저 모든 항목을 미리 JIT 했습니까? – SLaks
pre-JITing은 응용 프로그램의 시작 시간에만 도움이됩니까? 귀하의 질문에 대답하기 위해, 나는 사전 JIT를하지 않았다. – TheDutchDevil
실행 시간의 70 %가 걸린다는 사실을 아는 것은 그리 중요하지 않습니다. 총 실행이 10ms라면 누가 신경을 쓰나요? 총 시간이 100 시간이면 누가 신경 써야합니까? (이 경우 전체 알고리즘을 다시 생각해 내야합니다.) 그러나 실제로 걸리는 시간과 소요되는 시간을 알고 있으면 도움이 될 수 있다고 생각합니다. – Enigmativity