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