C# 这是正确的处置方式吗

C# 这是正确的处置方式吗,c#,C#,即使使用C#的垃圾收集,我觉得在使用完资源后,我也应该释放它们。这是否正确使用dispose来释放ssh客户端 public void Disconnect() { string _disconnect = "bye"; _sendCommand = _disconnect; SendToCodec(_sendCommand);

即使使用C#的垃圾收集,我觉得在使用完资源后,我也应该释放它们。这是否正确使用dispose来释放ssh客户端

            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个方法……到我完成时,可能会更多。谢谢你的尝试…最后的建议