2010-11-10 2 views
3

Использование блоков кода или метода Dispose не используется в этом примере MSDN о диалоговых окнах.Компоненты CommonDialog должны быть утилизированы?

Но почему он не утилизирован, несмотря на его метод Dispose?

+1

для меня это выглядит как плохой образец, он должен быть утилизирован ... его не критический недостаток, так как GC должен разобраться. –

ответ

2

Hmya, это не кристально ясно, к сожалению. OpenFileDialog и друзья наследуют Dispose() из класса Component. Каждый компонент должен реализовать Dispose(), потому что метод Dispose() формы вызывает его. Просто так бывает, что есть несколько классов, основанных на компонентах, которые имеют метод Dispose() do-nothing. Классы диалога подобны этим, это диалоги. Они очищают любые неуправляемые ресурсы, когда диалог закрывается. Никакой дополнительной помощи не требуется.

Это не совсем хорошо документировано. Это несколько заметно, библиотека MSDN показывает, что метод был унаследован, а не переопределен классом. Что еще не делает очевидным, что в обход унаследованного метода Component.Dispose() все в порядке (оно есть). Если вам неудобно, многие программисты, то не стесняйтесь обернуть его с помощью инструкции. Это не вредит вызову метода Dispose(), который ничего не делает. Ну, не такой вред, который вы когда-либо могли бы измерить.

0

Ну, их финализатор будет в конечном итоге вызван сборщиком мусора, и поскольку они не удерживают (много) неуправляемых ресурсов (и, конечно же, ничего подобного открытым файловым дескрипторам), они не потрудились с ним для примера.

Кроме того, сколько раз, по вашему мнению, диалог файла обычно отображается в течение срока службы приложения?

+1

Он честно зависит от приложения, от того, как он работает и как он используется пользователем. Кто-то может открыть диалоговые окна файлов слева и справа. – rossisdead

+0

@rossisdead, конечно, и выбор для вызова 'Dispose' доступен вам, если это необходимо. Но в целом, позволяя ему собирать мусор, должно быть достаточно хорошо! (Я уверен, именно так началась проблема с утечкой памяти в Chrome) – Blindy

+0

Я не уверен, что согласен. Вы никогда не знаете, как кто-то еще закончит использовать его (скажем, например, он используется в настраиваемом элементе управления, который кто-то еще не может получить доступ к коду). Вместо того, чтобы затруднительно найти ошибку, было бы проще убедиться, что вы утилизируете ее должным образом. – rossisdead

0

The Garbage Collector очищает вас после того, как вы явно не указали Dispose().
В большинстве случаев вы можете полагаться на сборщик мусора, чтобы сделать это за вас, если только вы не очень четко разбираетесь в использовании минутной памяти после каждого наращивания.

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