我想知道在从字节数组 (byte[]
) 创建的 MemoryStream
上使用 BinaryReader
是否会显着降低性能.
我想读取二进制数据,我将数据作为字节数组获取。我目前正在决定两种读取数据的方法,并且必须相应地实现许多读取方法。每次读取操作后,我都需要在读取数据之后 的位置,因此我正在考虑使用 BinaryReader
。第一种非 BinaryReader 方法:
object Read(byte[] data, ref int offset);
第二种方法:
object Read(BinaryReader reader);
这样的 Read()
方法将被频繁调用,连续调用相同的数据,直到所有数据都被读取。
那么,使用 BinaryReader
感觉更自然,但对性能有多大影响?
最佳答案
每次调用 Read(byte[]) 都会产生大量垃圾。 MemoryStream 将有 40 个字节,我停止计算 BinaryReader 的 64 个字节。 Dispose 也经常被使用,尽管它什么都不做。从您的问题中无法判断该开销是否重要。
我个人更喜欢 Read(BinaryReader) 重载,不仅仅是因为它更有效率。这也提供了更改数据源的灵 active 。它不必再位于 byte[] 中,您可以从 FileStream 或 NetworkStream 中获取它。
关于c# - Performance : use a BinaryReader on a MemoryStream to read a byte array, 还是直接读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3029189/