c# - Performance : use a BinaryReader on a MemoryStream to read a byte array, 还是直接读取?

标签 c# arrays memorystream binaryreader

我想知道在从字节数组 (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/

相关文章:

c# - 名称不能以 ' ' 字符开头

c# - 从内存流读取到字符串

c# - 在 MVC 应用程序中卡住使用 Microsoft.Web.WebPages.OAuth.OAuthWebSecurity

c# - 如何修复微软认知语音错误 "Failed to initialize platform (azure-c-shared)"?

c++ - 将多个 vector 转换为数组,或返回它们 (c++)

javascript - 如何通过 URL 发送数组并在 PHP 中提取它?

c# - 使用 mysqldataadapter 归档时设置数据表的列默认值

c# - 使用类型参数约束实现两次相同的通用接口(interface)

ios - 将列表的字符串转换为列表 Swift

wpf - 如何将 System.Windows.Media.DrawingImage 转换为 Stream?