c# 从地址拷贝byte_比较C#中几种常见的复制字节数组方法的效率[转]

本文通过 BenchmarkCopyArray 应用程序测试了 C# 中的四种字节数组复制方法:Binary.ReadBytes、ConvertToList、Array.Copy 和 Buffer.BlockCopy,并记录了它们的运行时间。实验中使用了一个包含10个字节的源数组,循环10000000次进行测试,展示了每种方法在效率上的差异。
摘要由CSDN通过智能技术生成

usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.IO;namespaceBenchmarkCopyArray

{classProgram

{private const int TestTimes = 10000000;static voidMain()

{var testArrayCopy = newTestArrayCopy();

TestCopy(testArrayCopy.TestBinaryReader,"Binary.ReadBytes");

TestCopy(testArrayCopy.TestConvertToList,"ConvertToList");

TestCopy(testArrayCopy.TestArrayDotCopy,"Array.Copy");

TestCopy(testArrayCopy.TestBlockCopy,"Buffer.BlockCopy");

Console.Read();

}private static void TestCopy(Action testMethod, stringmethodName)

{var stopWatch = newStopwatch();

stopWatch.Start();for (int i = 0; i < TestTimes; i++)

{

testMethod();

}

testMethod();

stopWatch.Stop();

Console.WriteLine("{0}: {1} seconds, {2}.", methodName, stopWatch.Elapsed.Seconds, stopWatch.Elapsed.Milliseconds);

}

}classTestArrayCopy

{private readonly byte[] _sourceBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};public voidTestBinaryReader()

{var binaryReader = new BinaryReader(newMemoryStream(_sourceBytes));

binaryReader.ReadBytes(_sourceBytes.Length);

}public voidTestConvertToList()

{

IList bytesSourceList = new List(_sourceBytes);var bytesNew = new byte[_sourceBytes.Length];

bytesSourceList.CopyTo(bytesNew,0);

}public voidTestArrayDotCopy()

{var bytesNew = new byte[_sourceBytes.Length];

Array.Copy(_sourceBytes,0, bytesNew, 0, _sourceBytes.Length);

}public voidTestBlockCopy()

{var bytesNew = new byte[_sourceBytes.Length];

Buffer.BlockCopy(_sourceBytes,0, bytesNew, 0, _sourceBytes.Length);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值