작업 중에 데이터 복사하는 루틴을 수정하고 있었는데, 문득 for문을 돌려서 무식하게 데이터를 집어넣는 방법과 시샵에서 C언어의memset함수 격인 Array.Copy 메소드를 사용하는 방법 중 어는 쪽이 더 빠를까 궁금증이 생겼다. 그래서 바로 테스트 해본 결과 놀랍게도 무식하게 for문돌려서 데이터를 복사한 방법이 더 빨랐다.

테스트 코드
int[] src = new int[40000000];
int[] dst = new int[40000000];

for (int i = 0; i < src.Length; i++)
{
src[i] = 0xff;
}

Stopwatch sw = new Stopwatch();

// -------------------------------------------------------
 sw.Start();
for (int i = 0; i < dst.Length; i++)
{
                dst[i] = src[i];
}
sw.Stop();
Console.WriteLine("{0}ms", sw.ElapsedMilliseconds);
 // -------------------------------------------------------

sw.Start();
Array.Copy(src, dst, dst.Length);
sw.Stop();
Console.WriteLine("{0}ms", sw.ElapsedMilliseconds);


결과
for문 복사 : 262ms
Array.Copy 메소드를 이용한 복사 : 348ms

흥미로운 결과가 한가지 더 있다.
CPU 점유율을 체크해본 결과 for문으로 돌렸을 때 CPU점유율이 Array.Copy 메소드를 썼을 때 보다 약 10프로 정도 더 먹는 것을 볼 수 있있다. 뭐 Array.Copy 메소드 내부가 어떻게 구현되어있는지는 확인해봐야 알겠지만 for문 돌리는게 CPU 점유율이 더 먹는건 당연한 것 같다. 시간날 때 왜 이런가 이유를 밝혀내봐야 겠다 ㅋㅋ


+ Recent posts