关于c#:我应该在每次使用后创建新的BinaryReader / BinaryWriter吗?

Should I create new BinaryReader/BinaryWriter after each use?

我有一个相关但不同的问题的场景。所以它可能看起来像一个重复的帖子,但事实并非如此

我正在研究一个使用最终在UI线程上创建的TcpClient来读写数据的类。创建TcpClient时,设计是连接到服务器并立即创建BinaryReader和BinaryWriter。

BinaryReader用于执行阻塞读取的专用线程。当数据到达时,我生成一个事件并传递数据进行处理。冲洗并重复。

当数据到达另一个线程时,使用BinaryWriter。现在它恰好是UI线程,但它不一定是。有一点是已知的,它与阻塞阅读器运行的线程不同。

因为我预先创建二进制处理程序,所以发现确保它们被正确处理是棘手的。似乎使用using语句将它们的生命封装在使用它们的位置要容易得多。

但是我知道创建一个可以重用的对象是浪费的,并给系统增加了负担。特别是BinaryWriter在一次使用后就会离开它的范围。

这些类和IDisposable对象的最佳实践是什么?


不,这不是必要的。 BinaryReader / Writer实现IDisposable的唯一原因是因为它们假定您传递给其构造函数的Stream的所有权。 处理.NET Framework中的流的类的标准行为。

但是你传递的Stream是一个由你的TcpClient对象拥有的NetworkStream。 它本身已经实现了IDisposable,它使用Dispose方法来配置NetworkStream和Socket。

所以这已经处理好了,当你关闭客户端时,流已经被处理掉了。 无需再通过阅读器和/或写入器进行处理。