繁体   English   中英

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

[英]Should I create new BinaryReader/BinaryWriter after each use?

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

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

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

当数据到达另一个线程时使用BinaryWriter 现在,它恰好是UI线程,但不是必须的。 已知的一件事是,它将不会与阻塞阅读器正在运行的线程相同。

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

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

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

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

但是,您传递的流是TcpClient对象拥有的NetworkStream。 它本身已经实现了IDisposable,它使用其Dispose方法来处置NetworkStream和Socket。

因此,这已得到解决,当您关闭客户端时,流已被丢弃。 无需通过读者和/或作家再次处置它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM