我有一个类,其中一个套接字被定义为一个成员对象。如果我想销毁此类的对象(设置为 null),我是否需要 .Close() 套接字
问问题
503 次
2 回答
2
简而言之,是的。
理想情况下,您的类将实现IDisposable
应该关闭套接字的。不这样做意味着套接字对象可以在内存中持续存在,直到垃圾收集器得到它。如果您计划重新连接到同一个端点,您将不得不这样做,否则底层 Windows 库将引发异常;(特别是错误 10056:在已连接的套接字上发出了连接请求。)
于 2013-09-06T21:05:20.533 回答
1
嗨,我认为您来自 C++ 方面,在 dispose 方法后面调用 C# Close 方法。关闭后,您无需执行任何操作。该对象将被释放,稍后从 GC 将设置为 null。
但是,如果您的班级中有一个套接字作为成员,则必须应用 Dispose 模式!
只需在您创建的类的 dispose 方法中处理您的套接字,请参见链接上方。
public class DisposableResourceHolder : IDisposable {
private Socket socket; // handle to a resource
public DisposableResourceHolder(){
this.socket= ... // allocates the resource
}
public void Dispose(){
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing){
if (disposing){
if (socket!= null) socket.Dispose(); // HERE DISPOSE
}
}
}
如果这可以解决您的问题,请将其标记为答案!
谢谢
于 2013-09-06T21:02:18.583 回答