c# - C# 中是否有 System.IO.BufferedStream 的替代方案?

标签 c# .net api bufferedstream

我收到以下异常:

System.NotSupportedException : This stream does not support seek operations.
   at System.Net.Sockets.NetworkStream.Seek(Int64 offset, SeekOrigin origin)
   at System.IO.BufferedStream.FlushRead()
   at System.IO.BufferedStream.WriteByte(Byte value)

以下链接显示这是 Microsoft 的已知问题。 http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=273186

这个堆栈跟踪显示了两件事:

  1. System.IO.BufferedStream 执行一些荒谬的指针移动操作。 BufferedStream 应该缓冲底层流而不是更多。如果有这样的查找操作,缓冲区的质量会很差。
  2. 它永远不会在不支持 Seek 的流上稳定工作。

还有其他选择吗? 我是否需要一个缓冲区和 C# 中的 NetworkStream 一起使用,还是已经缓冲了。

编辑:我只想减少对底层套接字流的读/写调用的数量。

最佳答案

NetworkStream 已被缓冲。所有接收到的数据都保存在缓冲区中等待您读取。对 read 的调用要么非常快,要么会阻塞等待从网络上的其他对等方接收数据,BufferedStream 在这两种情况下都无济于事。

如果您担心阻塞,那么您可以考虑将底层套接字切换为非阻塞模式。

关于c# - C# 中是否有 System.IO.BufferedStream 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551471/

相关文章:

javascript - Svelte:有没有办法以一种不会在每次组件呈现时触发 api 调用的方式缓存 api 结果?

ios - 使用 swift,一旦给出用户登录信息,是否可以在后台打开一个 webview 以从网站获取数据?

c - 如何让X11窗口跨越多个显示器

c# - 可以将参数传递给 WPF 用户控件吗?

c# - Entity Framework 在删除前执行更新,我想停止这个

c# - 如何使用 .NET 将遗留 (OLE) 颜色转换为 (A)RGB?

c# - 序列化容器类时如何忽略特定的 List<T> 项

c# - 在服务器桌面 session 上捕获屏幕

c# - 显示由外键引用到 userprofile 表的表中的项目列表

c# - 调整大小后无法删除或重命名原始文件