有没有最好的(见下文)在 C# 中附加两个字节数组的方法?
假装我有完全的控制权,我可以使第一个字节数组足够大以在最后容纳第二个字节数组并使用Array.CopyTo函数。或者我可以遍历单个字节并进行分配。
有没有更好的方法?我无法想象像将字节数组转换为字符串并将它们连接起来并将它们转换回来这样的事情会比上述任何一种方法都好。
就最佳/更好(按顺序)而言:
- 最快的
- 最少的 RAM 消耗
一个限制是我必须在 .NET 2.0 框架中工作。
推荐的两个选择是 MemoryStream 和 BlockCopy。我已经对 10,000,000 个循环进行了 3 次简单的速度测试,得到了以下结果:
3 次运行 10,000,000 次循环的平均值(以毫秒为单位):
- BlockCopy Time: 1154 , 范围为 13 毫秒
- MemoryStream GetBuffer 时间:1470,范围为 14 毫秒
- MemoryStream ToArray Time:1895,范围为3毫秒
- CopyTo Time:2079,范围为19毫秒
- 逐字节时间:2203,范围为10毫秒
List<byte> AddRange超过 1000 万次循环的结果:List<byte> 时间:16694
相对 RAM 消耗(1 是基线,越高越差):
- 逐字节:1
- 块复制:1
- 复制到:1
- 内存流获取缓冲区:2.3
- MemoryStream ToArray:3.3
- 列表<字节>:4.2
测试表明,一般来说,除非你正在做大量的字节副本[我是],否则查看字节副本不值得关注[例如,1000 万次运行产生多达 1.1 秒的差异]。