Когда расположены элементы управления asp.net
Никогда, если есть живая ссылка.
Вызов метода Dispose
рекомендуется, если у вас есть Disposable
Объекты. Если вы просто позволите им выйти из области видимости, они будут добавлены в очередь завершения в первом цикле сбора мусора. И освободит память во втором цикле сборки мусора после завершения. Финализация - это нежелательные накладные расходы, если вы можете вызвать метод Dispose
и SuppressFinalization
.
И другая вещь в вашем примере кода. Наличие метода Finalize
без какого-либо неуправляемого кода. Если вы посмотрите на путь выполнения Finalize-> Dispose (false), вы заметите, что он ничего не делает. Потому что все управляемые объекты обрабатываются только если disposing
. Поэтому нет смысла добавлять метод Finalize
, если у вас нет неуправляемых объектов.
Объект будет добавлен в очередь завершения и вызовет метод Finalize
, только если этот объект не имеет живых ссылок (в первом цикле GC). Так что вы обязаны отменить регистрацию необходимых событий. В противном случае Finalize
никогда не будет выполняться, пока есть ссылка на этот объект.
Вот хороший справочник по отмене регистрации обработчиков событий.
Необходимо ли явно удалять обработчики событий в C #