WPF - window.show () никогда не освобождает свою память?

Итак, я новичок в WPF, и у меня возникают проблемы с тем, что мои окна не освобождают свою память после того, как я открываю их с помощью .Show(). Я в основном хочу открыть немодальный диалог. Что я вижу, так это то, что память увеличивается, когда я открываю новое окно, а затем, когда я закрываю его с помощью кнопки выхода в правом верхнем углу, память никогда не уменьшается. Есть идеи по освобождению памяти?


person Travyguy9    schedule 12.10.2009    source источник
comment
Что делает окно, когда оно открыто?   -  person Simon Fox    schedule 13.10.2009


Ответы (2)


Если вы проверяете с помощью диспетчера задач Windows, хотя память не была освобождена .net, вы обнаружите, что она была освобождена вашим приложением и может быть повторно использована.

ссылка/ссылка

Чтобы убедиться, что ваше приложение освобождает память при закрытии приложения, используйте Application.ShutdownMode соответствующим образом.

ссылка/ссылка

person Russell    schedule 12.10.2009
comment
Ты прав. Мне просто нужно было вызвать SetProcessWorkingSetSize(), чтобы указать операционной системе обновить использование памяти. Большое спасибо. - person Travyguy9; 13.10.2009

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

Если Диспетчер задач говорит, что приложение все еще открыто, когда его следует закрыть, значит, одна из форм не была должным образом выпущена...

РЕДАКТИРОВАТЬ для добавления: когда вы вызываете форму для открытия, используйте .Close(), хотя это и не требует пояснений, я никогда не использовал .Close(), и это вызвало эту проблему для меня, но было исправлено, как только я добавил команду.

person Michael    schedule 12.10.2009
comment
Да, я в основном просто делаю новое окно, а затем иду дальше. Я не держусь за объект окна, поэтому не могу вызвать .close(). - person Travyguy9; 13.10.2009
comment
Как вы собираетесь делать новое окно? Просто окно сообщений или вы делаете Window1 win = new Window1();? - person Michael; 13.10.2009