【发布时间】:2009-05-21 20:58:43
【问题描述】:
在 C# 中附加两个字节数组是否有最好的(见下文)方法?
假装我有完全的控制权,我可以使第一个字节数组足够大以容纳最后的第二个字节数组并使用Array.CopyTo 函数。或者我可以遍历单个字节并进行分配。
有没有更好的方法?我无法想象像将字节数组转换为字符串并加入它们并将它们转换回来之类的事情会比上述任何一种方法都好。
就最佳/更好而言(按顺序):
- 最快
- RAM 消耗最少
一个限制是我必须在 .NET 2.0 框架中工作。
推荐的两个选择是 MemoryStream 和 BlockCopy。我进行了 10,000,000 次循环的简单速度测试 3 次,得到以下结果:
平均 3 次运行 10,000,000 次循环(以毫秒为单位):
- 块复制时间:1154,范围为 13 毫秒
- MemoryStream GetBuffer 时间:1470,范围为 14 毫秒
- MemoryStream ToArray 时间:1895,范围为 3 毫秒
- CopyTo Time:2079,范围为 19 毫秒
- 逐字节时间:2203,范围为10毫秒
List
相对 RAM 消耗(1 是基线,越高越差):
- 逐字节:1
- 块复制:1
- 复制到:1
- MemoryStream GetBuffer:2.3
- MemoryStream ToArray:3.3
- 列表:4.2
测试表明,一般来说,除非你正在做很多字节副本 [我是],否则查看字节副本并不值得关注 [e.g. 1000 万次运行产生的差异高达 1.1 秒]。
【问题讨论】:
-
Re: 内存使用情况最好的方法是使用内存分析器。
-
谢谢,我使用 CLR Profiler 来获取内存数据。忘记以管理员身份运行它,因此延迟了获得结果。