Нужно ли вызывать Dispose () для статического объекта? - PullRequest
4 голосов
/ 05 июня 2011

Если у меня есть статический объект WebClient, мне нужно вызвать Dispose () для него в конце Main ()?

Ответы [ 2 ]

5 голосов
/ 05 июня 2011

Вы должны всегда Dispose() объекты, когда вы закончите с ними, независимо от того, где вы положили объект.

Если объект находится в статическом поле, может быть сложнее выяснить, когда вы закончите с ним.

2 голосов
/ 05 июня 2011

Как правило, вы должны утилизировать любые одноразовые предметы. Это позволит им убирать любые ресурсы. Однако нет гарантии, что утилизация будет вызываться для одноразового типа - потребитель может пренебречь его вызовом, а CLR не вызывает его автоматически.

Если тип действительно нуждается в своей логике очистки для выполнения (например, при выделении неуправляемой памяти или создании кучи файлов в файловой системе), он должен реализовать финализатор вместе с утилитой dispose шаблон. CLR вызовет финализатор при выходе из процесса, если он еще не был вызван (обычно через удаление объекта). Да, есть некоторые предостережения об этом (например, плохой финализатор может испортить вечеринку для других финализируемых экземпляров), но CLR гарантирует как минимум попытку запустить все финализаторы при выходе из процесса.

Итак, технически, у меня нет никаких причин, по которым вы обязательно должны вызывать метод dispose в этом случае. Тем не менее, это хорошая привычка, тем не менее, войти в нее.

...