我想知道在从字节数组(BinaryReader
)创建的MemoryStream
上使用byte[]
是否会显着降低性能。
我想读取二进制数据,并将该数据作为字节数组获取。我目前正在决定两种读取数据的方法,并且必须相应地实现许多读取方法。在每次阅读操作之后,我需要在读取数据之后立即,因此我正在考虑使用BinaryReader
。第一种非BinaryReader方法:
object Read(byte[] data, ref int offset);
第二种方法:
object Read(BinaryReader reader);
这些Read()
方法将在相同的数据上连续调用,直到所有数据都被读取为止。
因此,使用BinaryReader
感觉更自然,但它对性能有多大影响?
答案 0 :(得分:2)
每次调用Read(byte [])都会产生大量垃圾。 MemoryStream将有40个字节,我停止计算BinaryReader的64个字节。虽然它没有做任何事情,但通常也会使用Dispose。从您的问题中无法判断这些开销是否重要。
我个人更喜欢Read(BinaryReader)重载,不仅因为它更有效。这也提供了更改数据源的灵活性。它不必再位于byte []中,您可以从FileStream或NetworkStream中提取它。
答案 1 :(得分:-1)
如果使用BinaryReader感觉更自然,那就这样做。我非常怀疑从阵列中读取会有什么明显的性能损失。