Kev*_*vin 32 c# sockets dispose
关闭后我还应该打电话Dispose()给我的插座吗?
例如:
mySocket.Shutdown(SocketShutdown.Both);
mySocket.Close();
mySocket.Dispose(); // Redundant?
Run Code Online (Sandbox Code Playgroud)
我想知道因为MSDN文档说明如下:
关闭Socket连接并释放所有相关资源.
Mar*_*ers 40
在内部调用Close会调用Dispose,因此您无需同时调用它们.来自.NET Reflector:
public void Close()
{
if (s_LoggingEnabled)
{
Logging.Enter(Logging.Sockets, this, "Close", (string) null);
}
((IDisposable)this).Dispose();
if (s_LoggingEnabled)
{
Logging.Exit(Logging.Sockets, this, "Close", (string) null);
}
}
Run Code Online (Sandbox Code Playgroud)
如果可能,您应该使用该using模式,以便始终调用Dispose,而不管可能发生的任何异常.
Ale*_*ort 21
在这种情况下,关闭和处置是相同的.当Ms在.Net 1中引入Dispose模式时,Dispose字不是很容易被发现.因此,指南是添加特定于上下文的关键字,这些关键字将执行相同的功能,并且将更容易被用户发现.像关闭文件和套接字一样.
按照惯例,您应该始终在实现IDisposable的任何内容上调用Dispose.除了显而易见的事情之外,你永远都不知道它可能会做些什
如果您碰巧使用Reflector来查看,事实上,目前不需要它,您不应该假设内部实现可能会在某些时候发生变化.
调用Dispose永远不会伤害.去做就对了 :)