Array.Reverse
에는 적용 할 수없는 배열을 되돌리기위한 기본 코드가 있으며 간단한 for 루프를 사용하는 것으로 되돌아갑니다. 내 테스트에서 Array.Reverse
은 매우 간단한 루프보다 빠릅니다. 1,000,000 요소 배열을 1,000 번 역전시키는이 테스트에서 Array.Reverse
은 약 600ms이고 for 루프는 약 800ms입니다.
비록 성능이 Array.Reverse
을 사용하는 이유로 권장하지 않습니다. 배열을 다시 반복하는 List
에로드하는 순간 분명한 차이가 있습니다. 어쨌든 앱을 프로파일 링하고 성능 병목 현상을 확인할 때까지는 성능에 대해 걱정할 필요가 없습니다. 귀하의 의견 중 하나에서
public static void Test()
{
var a = Enumerable.Range(0, 1000000).ToArray();
var stopwatch = Stopwatch.StartNew();
for(int i=0; i<1000; i++)
{
Array.Reverse(a);
}
stopwatch.Stop();
Console.WriteLine("Elapsed Array.Reverse: " + stopwatch.ElapsedMilliseconds);
stopwatch = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
MyReverse(a);
}
stopwatch.Stop();
Console.WriteLine("Elapsed MyReverse: " + stopwatch.ElapsedMilliseconds);
}
private static void MyReverse(int[] a)
{
int j = a.Length - 1;
for(int i=0; i<j; i++, j--)
{
int z = a[i];
a[i] = a[j];
a[j] = z;
}
}
"목록이 더 빨라질 것이라고 생각했습니다." - 성능 문제를 측정 했습니까? 그렇지 않다면, 당신은 조기에 마이크로 최적화 중입니다 ... –
과 조숙 한 최적화는 모든 악의 뿌리입니다 (크 누스) – mmr
하지만 큐를 사용하면 한 번에 하나씩 꺼내 올 수 있지만 목록으로는 범위를 수행 할 수 있습니다 이것은 대부분의 경우 더 빠릅니다. – daniel