Удаление XMLDocument - почему он не поддерживает IDisposable? - PullRequest
2 голосов
/ 14 ноября 2011

Класс XMLDocument может показаться идеальным кандидатом для поддержки IDisposable, потому что ...

  • потенциально может содержать много данных.
  • a представляет потенциально сложную модельданных.

Это позволит вам использовать его внутри оператора Using {...}, и он будет сразу же собирать мусор после использования.

Однако он не поддерживаетit.

В таком случае, каков наилучший способ избавиться от него?

Или нет необходимости поддерживать IDisposable - я полагаю, что вы можете просто установить его ссылку на null, когда закончите с ним?

Или ключевое отличие здесь в том, что он не связывает внешние ресурсы, такие как соединения с БД или внешние файлы, и, следовательно, не требует IDispoable «поддержки»?

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011

Это позволит вам использовать его внутри оператора Using {...}, и он будет сразу же собирать мусор после использования.

Нет, он будет утилизирован сразу после использования, без сбора мусора.Утилизация и сбор мусора - это не одно и то же, хотя они могут выглядеть одинаково.Dispose предназначен для освобождения неуправляемых ресурсов, таких как соединение с БД, файловые дескрипторы, неуправляемая память и т. Д. Сборщик мусора восстанавливает неиспользуемую управляемую память.

В случае XmlDocument, когда не остается ссылок на него, он становится пригодным для сбора мусора, и используемая им память будет возвращаться по мере необходимости.Так что вам просто нужно освободить все ссылки на XmlDocument и подождать, пока GC выполнит свою работу.Обратите внимание, что вы могли бы форсировать цикл GC, но вам, вероятно, не следует: GC - дорогостоящая операция, и система знает лучше вас, когда подходящее время для этого.

3 голосов
/ 14 ноября 2011

Или ключевое отличие здесь в том, что он не связывает внешние ресурсы, такие как соединения с БД или внешние файлы, и, следовательно, не требует IDispoable «поддержки»?гвоздь на голове есть.Единственный ресурс, который он использует, - это память (которой потенциально может быть предоставлено много объектов для представления документа XML), и у нас есть совершенно громоздкое средство для управления памятью в .net.т.е. сборщик мусора.

...