我有一个相关但不同的问题。所以它可能看起来像一个重复的帖子,但它不是
我正在使用最终在UI线程上创建的 TcpClient 来读取和写入数据。创建 TcpClient 时,设计是连接到服务器并立即创建 BinaryReader 和 BinaryWriter 。
BinaryReader 用于执行阻塞读取的专用线程。当数据到达时,我生成一个事件并传递数据进行处理。冲洗并重复。
当数据到达另一个线程时,使用 BinaryWriter 。现在它恰好是UI线程,但它不一定是。有一点是已知的,它与阻塞阅读器运行的线程不同。
因为我预先创建二进制处理程序,我发现确保它们被正确处理是棘手的。似乎使用using语句将它们的生命封装起来会更容易。
但是我知道创建一个可以重用的对象是浪费的,并给系统增加了负担。特别是 BinaryWriter 会在一次使用后离开其范围。
这些类和 IDisposable 对象的最佳做法是什么?
答案 0 :(得分:2)
不,这不是必需的。 BinaryReader / Writer实现IDisposable的唯一原因是因为它们假定您传递给其构造函数的Stream的所有权。处理.NET Framework中的流的类的标准行为。
但是你传递的Stream是一个由你的TcpClient对象拥有的NetworkStream。它本身已经实现了IDisposable,它使用Dispose方法来处理NetworkStream和Socket。
所以这已经处理好了,当你关闭客户端时,流已经被处理掉了。无需通过阅读器和/或作者再次处理它。