性能:在MemoryStream上使用BinaryReader读取字节数组,还是直接读取?

时间:2010-06-12 15:37:45

标签: c# bytearray memorystream binaryreader

我想知道在从字节数组(BinaryReader)创建的MemoryStream上使用byte[]是否会显着降低性能。

我想读取二进制数据,并将该数据作为字节数组获取。我目前正在决定两种读取数据的方法,并且必须相应地实现许多读取方法。在每次阅读操作之后,我需要在读取数据之后立即,因此我正在考虑使用BinaryReader。第一种非BinaryReader方法:

object Read(byte[] data, ref int offset);

第二种方法:

object Read(BinaryReader reader);

这些Read()方法将在相同的数据上连续调用,直到所有数据都被读取为止。

因此,使用BinaryReader感觉更自然,但它对性能有多大影响?

2 个答案:

答案 0 :(得分:2)

每次调用Read(byte [])都会产生大量垃圾。 MemoryStream将有40个字节,我停止计算BinaryReader的64个字节。虽然它没有做任何事情,但通常也会使用Dispose。从您的问题中无法判断这些开销是否重要。

我个人更喜欢Read(BinaryReader)重载,不仅因为它更有效。这也提供了更改数据源的灵活性。它不必再位于byte []中,您可以从FileStream或NetworkStream中提取它。

答案 1 :(得分:-1)

如果使用BinaryReader感觉更自然,那就这样做。我非常怀疑从阵列中读取会有什么明显的性能损失。