Будет ли вызов close () в моей службе WCF освобождать все ресурсы? - PullRequest
4 голосов
/ 13 февраля 2009

Будет ли вызов close в моей службе WCF уничтожать все ресурсы или устанавливать их для GC, или мне также следует установить значение null?

Ответы [ 3 ]

5 голосов
/ 13 февраля 2009

Во-первых, прокси WCF IDisposable, так что вы можете вид использовать using:

using(var proxy = new MyProxy()) { // see below - not quite enough
   // use proxy
}

К сожалению , WCF также имеет ошибочную реализацию Dispose(), которая регулярно генерирует исключения. Однако вот действительно крутой трюк , чтобы заставить его работать правильно. Я тоже писал об этом сам , но я думаю, что первая ссылка намного лучше.

Итак: используйте IDisposable и using, но используйте это с осторожностью (в данном случае).

Установка поля обычно не имеет значения. Есть несколько крайних случаев (таких как переменные, захваченные несколькими делегатами, статические поля, объекты с длительным сроком службы и т. Д.), Но в целом оставьте это в покое. В частности, не делают это, поскольку теоретически продлевает срок службы:

if(field != null) field = null; // BAD
0 голосов
/ 13 февраля 2009

Вам нужно установить переменную в null, если она будет доступна в течение длительного времени после этого. Скажем, поле на долгоживущем объекте или статическое поле. В целом это относится не только к WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...