2016-03-04 89 views
1

即使使用C#的垃圾收集,我觉得我应该释放资源,当完成使用它们。这是正确使用处置释放我的SSH客户端?这是一个妥善使用处置

  public void Disconnect() 
      { 
       string _disconnect = "bye"; 
       _sendCommand = _disconnect; 
       SendToCodec(_sendCommand); 
       client.Disconnect(); 
       client.Dispose(); 
      } 
+0

没有。你最好使用''''语句而不是手动调用dispose http://stackoverflow.com/questions/75401/uses-of-using-in-c-sharp –

+3

@ M.kazemAkhgary:这只有当你只需要你在一种方法中的对象。在这种情况下,似乎不是这样。 –

+3

关于使用'using'的注释并没有帮助,因为您的'client'变量显然跨越了方法。我唯一的建议是将SendToCodec和Disconnect放在'try'中,并将'Dispose'放在'finally'中,以确保即使抛出异常也会发生。 – dman2306

回答

1

Dispose和朋友的目的是为了释放通常是其他事情不仅仅是内存如果他们呆在身边,直到垃圾收集得到周围收集的对象可能导致问题的非托管资源。如果对象的行为正确,那么当GC破坏对象时,最终会收回非内存资源,但这可能会在很长一段时间后才会收回。例如,一个FileStream没有正确放置会使该文件处于打开状态,直到它最终被收集,这可能会阻止其他人访问该文件。

作为一个经验法则,如果有问题的对象有一个Dispose方法,它通常是一个很好的指示,当你完成它时应该调用它。

请注意,在许多对象(如内置文件和套接字对象)的情况下,还有一种替代方法,如Close。没有必要同时拨打DisposeClose - 实际上可能只是打电话给其他人。 (例如:TcpClient.Close真的只是调用Dispose内)

1

你应该总是调用Dispose()或使用using声明,实现IDisposable的对象上自动调用Dispose()。它永远不会伤害,最好是安全而不是遗憾。不仅如此,它还使得你的意图清楚明白谁在你之后必须支持你的代码。