项目中需要频繁处理byte[],之前复制byte[]一直用的是array.skip(x).take(x).ToArray(),因为它写起来方便。
今天突然想起复制数组还有个方法Array.Copy(),不知道哪个方法更快一些,就写了代码进行测试。
测试代码:
MemoryStream stream = FileIO.GetFile(@"C:\Users\Admin\Desktop\000.psd"); byte[] byts = stream.ToArray(); stream.Close(); int i = 0; int n = 6000; Console.Out.WriteLine("开始测试"); Stopwatch sw = new Stopwatch(); sw.Start(); while (i < byts.Length) { try { var t = byts.Skip(i).Take(n).ToArray(); i += n; }catch(ArgumentException e) { i += n; } } sw.Stop(); Console.Out.WriteLine("\tTake总用时:{0}秒", sw.ElapsedMilliseconds * 0.001); i = 0; sw.Restart(); while(i < byts.Length) { try { byte[] t = new byte[n]; Array.Copy(byts, i, t, 0, n); i += n; }catch(ArgumentException e) { i += n; } } sw.Stop(); Console.Out.WriteLine("\tCopy总用时:{0}秒", sw.ElapsedMilliseconds * 0.001);
测试结果:
Take总用时:27.344秒 Copy总用时:0.035秒