Приложение System Tray и объем памяти - PullRequest
2 голосов
/ 01 июня 2010

Я создал небольшое приложение, которое, по сути, существует в системном трее, и пользователю нужно только открыть реальное приложение в ОЧЕНЬ немногих случаях. Проблема заключается в том, что после того, как администратор впервые открыл приложение, память заполняется огромным количеством данных (пользовательский интерфейс WPF для сетей данных, дерева и т. Д.). Но затем пользователь снова свернет приложение и будет сидеть там большую часть времени. Единственный доступный пользовательский интерфейс - это контекстное меню значка на панели задач.

Так вот в чем дело: Как я могу утилизировать ВЕСЬ интерфейс каждый раз, когда приложение свернуто? Я пробовал несколько вещей в WPF, но я никогда не смогу избавиться от объектов пользовательского интерфейса, так как WPF хранит ссылки на них.

Что бы мне понравилось: открыть приложение (загруженный пользовательский интерфейс) -> свернуть в трей -> весь пользовательский интерфейс удален, а осталась только память, используемая бизнес-логикой ... В следующий раз приложение открывается из трей : Весь интерфейс перестроен.

Заранее большое спасибо!

1 Ответ

0 голосов
/ 19 августа 2010

Полагаю, у вас может быть скрытое главное окно, и когда оно будет восстановлено из трея, оно откроет Window2, который будет содержать ВЕСЬ интерфейс, когда вы свернете приложение, Window2 может быть закрыто (таким образом, уничтожено). Или, возможно, можно открыть Window2 напрямую, дважды щелкнув значок в трее или через контекстное меню ...

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

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

...