2016-03-04 4 views
1

Даже при сборке мусора C#, я чувствую, что я должен освобождать ресурсы, когда вы их используете. Является ли это правильным использованием утилиты для выпуска моего ssh-клиента?Является ли это правильным использованием утилиты

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

нет. вам лучше использовать инструкцию 'using' вместо того, чтобы звонить вручную. http://stackoverflow.com/questions/75401/uses-of-using-in-c-sharp –

+3

@ M.kazemAkhgary: Это действительно реально, когда вам нужно только ваше объект одним способом. В этом случае это не похоже. –

+3

Комментарий об использовании 'use' не помогает, так как ваша переменная' client' использует методы переменной. Единственное, что я хотел бы сделать, это поставить SendToCodec и Disconnect в 'try' и' Dispose' в 'finally', чтобы убедиться, что это происходит, даже если выбрано исключение. – dman2306

ответ

1

Цель Dispose и друзей, чтобы освободить неуправляемые ресурсы, которые, как правило другие вещи, чем просто память, которые могут вызвать проблемы, если они остаются вокруг, пока сборщик мусора не получает вокруг, чтобы собирать объект. Если объект ведет себя правильно, ресурсы без памяти будут возвращены в конце, когда GC уничтожит объект, но это может быть долгое время. Например, FileStream, который неправильно размещен, оставит файл открытым до тех пор, пока он не будет собран, что может препятствовать доступу других к файлу.

Как правило, если объект, о котором идет речь, имеет метод Dispose, это, как правило, хороший признак, который вы должны назвать, когда закончите с ним.

Обратите внимание, что в случае многих объектов, таких как встроенные файлы и объекты сокетов, есть также альтернативный метод, называемый как-то вроде Close. Нет необходимости звонить и Dispose, и Close - на самом деле, возможно, вы просто вызовите другого внутри. (Пример: TcpClient.Close действительно просто вызывает Dispose внутри)

1

Вы должны всегда вызывать Dispose() или использовать using заявление, которое автоматически вызывает Dispose() на объект, который реализует IDisposable. Это никогда не болит, и лучше быть в безопасности, чем сожалеть. Не только это, но и делает ваше намерение ясным для тех, кто должен поддерживать ваш код после вас.

Смежные вопросы