Фон приложения
Наша платформа является WPF-приложением, запускаемым нажатием одной кнопки. У нас есть «оболочка», которая содержит структуру меню навигации и содержит наши собственные классы «страницы». Когда вы переходите на новую страницу, мы меняем содержимое оболочки (по сути).
Проблема
Итак, я работаю в компании, которая работает над чрезвычайно крупным программным проектом. У нас много кода, с которым мы обнаружили проблемы с памятью.
Проблема в том, что в нашем приложении много мест, где события проводные и никогда не подключены. Я не уверен, почему разработчики делали это, я предполагаю, что они ожидали, что объекты будут очищаться при каждом переходе пользователя на новую «страницу».
У нас нет возможности рефакторинга каждой страницы (в этом выпуске). Есть ли способ с C # удалить все ссылки из объекта? (Поэтому разрешает сборщику мусора выбросить этот объект вместе со всеми его внутренними ссылками)
Мы пытаемся вернуть эту память, но довольно сложно найти объекты, которые все еще ссылаются на наши страницы (ссылки на объекты), когда мы имеем дело с WPF.
Мы рассмотрели визуальные и логические деревья и использовали приложения для профилирования, чтобы помочь нам очистить вещи вручную (для проверки идеи), и это оказалось чрезвычайно сложным.
Я откинулся на спинку кресла и подумал, почему мы делаем всю эту работу, чтобы найти ссылки на объекты, не можем ли мы просто «разыменовать» эту «страницу», когда она закрыта?
Что приводит меня сюда:)
Любая помощь с благодарностью!
ОБНОВЛЕНИЕ 1
В комментариях спрашивалось следующее:
Q: Есть ли приложение. на самом деле есть проблемы с памятью? Как они выставлены / обнаружены? Или эта память болтается до GC2? - Митч Пшеничный
A: Проблемы с памятью. Если мы покидаем страницу (свойство, содержащее страницу, устанавливается на новый объект), старый объект никогда не собирается сборщиком мусора. Так что память просто продолжает расти. Если наша компания начала заново, с этим приложением. Первое, на что мы должны обратить внимание, это реализовать шаблоны WeakEvent и использовать больше маршрутизируемых команд в WPF.
ОБНОВЛЕНИЕ 2
Я смог найти собственное решение .