繁体   English   中英

我是否需要 Dispose() 从 TcpListener 等返回的对象

[英]Do I need to Dispose() of objects returned from TcpListener etc

TcpListener函数AcceptTcpClient() (及其异步朋友)返回一个TcpClient ,它实现了IDisposable TcpClient.GetStream()反过来返回一个 Stream,它也是一次性的。 我应该处理这些物品吗?

例如,这是正确的吗?

using (var client = listener.EndAcceptTcpClient(result))
using (var stream = client.GetStream())
using (var writer = new StreamWriter(stream, Encoding.ASCII))
using (var reader = new StreamReader(stream, Encoding.ASCII))
{
   //some code
}

另外,当我的writerreader被释放时,他们不会都试图关闭同一个流对象吗?

你的第一个问题的简短回答是肯定的。 您应该处理所有实现 IDisposable 的对象。 有一些实现了 IDisposable 的类实际上不需要被释放,但这些通常是因为它是一个继承自微软想要通用的其他东西的类,以及一些/许多/大部分的目标实现可能/确实需要处置,因此即使在他们自己不需要处置的实现上,接口也存在。

你的第二个问题的答案是否定的。 处理作者和读者不应该关闭流,因为流是它自己的对象,有自己的生命周期。 仅仅因为写入器/读取器消失并不意味着你已经完成了流,但是唉...... .NET 中有一些类不遵循这一点,它们确实关闭和/或尝试处理传递的对象在他们真的不应该的时候给他们。

暂无
暂无

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

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