【发布时间】:2012-09-14 18:17:06
【问题描述】:
我需要将 IEnumerable<byte> 的字节写入文件。
我可以将其转换为数组并使用Write(byte[]) 方法:
using (var stream = File.Create(path))
stream.Write(bytes.ToArray());
但由于IEnumerable 不提供集合的项目数,因此不建议使用ToArray unless it's absolutely necessary。
所以我可以迭代 IEnumerable 并在每次迭代中使用 WriteByte(byte):
using (var stream = File.Create(path))
foreach (var b in bytes)
stream.WriteByte(b);
我想知道在写入大量数据时哪个会更快。
我猜想使用Write(byte[]) 会根据数组大小设置缓冲区,这样处理数组时会更快。
我的问题是,当我只有一个包含 MB 数据的 IEnumerable<byte> 时,哪种方法更好?将其转换为数组并调用Write(byte[]) 或迭代它并为每个数组调用WriteByte(byte)?
【问题讨论】:
-
为什么不自己测量呢?你有什么样的
IEnumerable<T>?它还实现其他集合接口(如IList<T>)的可能性有多大?
标签: .net performance stream bytearray filestream