我应该在每次使用后创建新的BinaryReader / BinaryWriter吗?

时间:2013-12-30 14:02:20

标签: c# stream tcpclient idisposable

我有一个相关但不同的问题。所以它可能看起来像一个重复的帖子,但它不是

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

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

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

因为我预先创建二进制处理程序,我发现确保它们被正确处理是棘手的。似乎使用using语句将它们的生命封装起来会更容易。

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

这些类和 IDisposable 对象的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

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

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

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