在 C# 中是否有最好的(见下文)方法来附加两个字节数组?
假装我拥有完全的控制权,我可以使第一个字节数组足够大以在末尾保存第二个字节数组并使用数组.复制到 https://msdn.microsoft.com/en-us/library/system.array.copyto%28v=vs.110%29.aspx功能。或者我可以循环各个字节并进行分配。
还有更好的方法吗?我无法想象像将字节数组转换为字符串并连接它们并将它们转换回来这样的事情会比上述任何一种方法更好。
就最好/更好而言(按顺序):
- Fastest
- 最少的 RAM 消耗
一个限制是我必须在 .NET 2.0 框架中工作。
推荐的两个选择是 MemoryStream 和 BlockCopy。我运行了 3 次 10,000,000 次循环的简单速度测试,得到以下结果:
10,000,000 次循环运行 3 次的平均值(以毫秒为单位):
-
块复制时间:1154,范围为13毫秒
- MemoryStream GetBuffer时间:1470,范围14毫秒
- MemoryStream ToArray 时间:1895,范围3毫秒
- CopyTo时间:2079,范围19毫秒
- 逐字节时间:2203,范围10毫秒
列表结果AddRange https://msdn.microsoft.com/en-us/library/z883w3dc%28v=vs.110%29.aspx超过 1000 万次循环:
列表 时间:16694
相对 RAM 消耗(1 为基线,越高越差):
- 逐字节:1
- 块复制:1
- 复制到:1
- 内存流获取缓冲区:2.3
- 内存流转数组:3.3
- 列表:4.2
测试表明,一般来说,除非你正在做大量的字节复制[我就是],查看字节副本并不值得关注[例如1000 万次运行产生的差异高达 1.1 秒]。
你要块复制 http://msdn.microsoft.com/en-us/library/system.buffer.blockcopy.aspx
根据这篇博文 https://web.archive.org/web/20140418112901/http://danielvl.blogspot.com/2004/04/use-bufferblockcopy-instead-of.html它比 Array.CopyTo 更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)