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