Форма Windows закрыта, но не уничтожена - PullRequest
1 голос
/ 18 января 2011

В моем приложении Windows Form, когда я закрываю форму (которая получена из базовой формы), запускаются ее события FormClosing и FormClosed Events, но деструктор никогда не срабатывает.Он по-прежнему сохраняет память занятой.

Есть идеи, как полностью уничтожить форму, когда она закрыта?

Ответы [ 2 ]

0 голосов
/ 18 января 2011

Если он не уничтожен, это означает, что сборщик мусора не считает, что его следует уничтожить.

Это означает, что вы либо:

  1. Удержание ссылки на объект где-то
  2. Иметь объект, слушающий событие (это тоже своего рода ссылка на объект)

Сборщик мусора не освободит форму, пока на нее не будет ссылок.

Если у вас есть важные ресурсы, которыми вы хотите распоряжаться, сделайте это IDisposable и используйте метод Dispose.

0 голосов
/ 18 января 2011

Деструкторы (или, вернее, финализаторы - в .NET нет деструкторов) не гарантированно будут выполняться в .NET - объекты могут быть очищены по желанию времени выполнения или даже никогда . Вы не можете полагаться на то, что ваш метод финализатора когда-либо вызывается.

Если вам нужно что-то сделать, когда ваша форма закрыта, обработайте событие Closed.

Если вам необходимо освободить неуправляемый ресурс (например, закрыть открытый файл), добавьте эту логику в метод Dispose ().

Если вы беспокоитесь об использовании памяти, не беспокойтесь об использовании памяти. Среда выполнения управляет памятью автоматически на основе собственной логики.

Ссылка: Сборка мусора (MSDN)

...