C# 这是正确的处置方式吗
即使使用C#的垃圾收集,我觉得在使用完资源后,我也应该释放它们。这是否正确使用dispose来释放ssh客户端C# 这是正确的处置方式吗,c#,C#,即使使用C#的垃圾收集,我觉得在使用完资源后,我也应该释放它们。这是否正确使用dispose来释放ssh客户端 public void Disconnect() { string _disconnect = "bye"; _sendCommand = _disconnect; SendToCodec(_sendCommand);
public void Disconnect()
{
string _disconnect = "bye";
_sendCommand = _disconnect;
SendToCodec(_sendCommand);
client.Disconnect();
client.Dispose();
}
Dispose
和friends的目的是释放非托管资源,这些资源通常不仅仅是内存,如果它们一直存在,直到垃圾收集器开始收集对象,可能会导致问题。如果对象行为正确,当GC销毁该对象时,非内存资源最终将被回收,但这可能需要很长时间。例如,未正确处理的FileStream
将使文件保持打开状态,直到最终收集为止,这可能会阻止其他人访问该文件
根据经验,如果所讨论的对象有一个Dispose
方法,这通常是一个很好的指示,表明您应该在处理完它后调用它
请注意,对于许多对象(如内置文件和套接字对象),还有一种替代方法,称为
Close
。不需要同时调用Dispose
和Close
——事实上,其中一个可能会在内部调用另一个。(例如:TcpClient.Close
实际上只是调用Dispose
内部)您应该始终调用Dispose()
或使用using
语句,该语句在实现IDisposable
的对象上自动调用Dispose()
。它永远不会痛,安全总比后悔好。不仅如此,它还让任何人都清楚地知道你的意图。不。你最好使用using
语句,而不是手动调用dispose@M.kazemAkhgary:只有当你只需要一种方法中的对象时,这才是真正可行的。在本例中似乎不是这样。关于使用的注释没有帮助,因为显然您的客户机变量跨度方法。我唯一的建议是将SendToCodec和Disconnect放在try
中,并将Dispose
放在最后一个中,以确保即使抛出异常也能发生。@MattiVirkkunen是的,这是正确的,客户端跨越了40-60个方法……到我完成时,可能会更多。谢谢你的尝试…最后的建议