C#

15# C#에서 Buffer.BlockCopy와 Array.Copy 속도 차이

NaHyungMin 2018. 12. 19. 18:14

네트워크 모듈 만들다가 MSDN에서 양형 한명이 의문점을 제시한 글을 보고 여러번 테스트 해봤다.


아래는 양형들이 테스트를 위해 수정하고 수정한 최종 코드이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Diagnostics;
 
namespace ArrayVsBlockTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int size = 1000000;
            byte[] src1 = new byte[size];
            byte[] src2 = new byte[size];
            byte[] des1 = new byte[size];
            byte[] des2 = new byte[size];
            Stopwatch watch = new Stopwatch();
   
            watch.Start();
            Buffer.BlockCopy(src1, 0, des1, 0, size);
            watch.Stop();
            Console.WriteLine("Buffer.BlockCopy took {0} ticks", watch.ElapsedTicks);
            
            watch.Start();
            Array.Copy(src2, des2, size);
            watch.Stop();
            Console.WriteLine("Array.Copy took {0} ticks.", watch.ElapsedTicks);
 
            Console.ReadLine();
        }
    }
}
 
cs



결론은 배열을 복사할 때, BlackCopy가 ArrayCopy보다 빠르지만 안정성은 보장할 수 없다.

배열의 크기를 알아오는 Length는 생각보다 속도를 잡아먹는다. 그냥 size를 미리 구해 넣자


참고 사이트

https://social.msdn.microsoft.com/Forums/vstudio/en-US/e3a08e63-7188-4f87-bb0a-fed6c8acf553/why-bufferblockcopy-runs-slower-than-arraycopy?forum=netfxbcl