2015-04-22 3 views
0

Эта проблема, кажется, изолирована от той части моей программы, где у меня есть элемент управления Winform, размещенный внутри окна WPF.Объем памяти постоянно увеличивается в приложении WPF/Winform

Пользователю представлено X количество строк и может щелкнуть Изменить в любой строке, чтобы открыть другое окно (< < это окно с элементом управления Winform).

Каждый раз, когда выполняется новый выбор, и загружается новое окно редактирования, использование памяти увеличивается между 1 и 4 мегабайтами. Я попытался обнулить/удалить все объекты, которые я могу, когда это окно закрыто, но это не изменило ситуацию.

Это ТОЛЬКО это окно, которое заставляет память постоянно расти, и она никогда не возвращается. Даже если я закрываю все, кроме главного окна, объем памяти остается там, где он есть.

+5

Это может произойти по ряду причин. Отключаете ли вы обработчики событий по мере необходимости? Вы располагаете одноразовыми экземплярами? –

+0

Я избавляюсь от вещей, у которых есть Dispose(). Использование '= null' для нескольких других вещей. Каков наилучший способ, чтобы обработчики событий были отсоединены? – Justin

+0

Стоит ничего, что сборщик мусора не обязательно будет запускаться после закрытия окна Winform. Он будет работать только тогда, когда он почувствует необходимость. Вы вынудили gc (например, использовать PerfView), чтобы увидеть, падает ли память? – user783836

ответ

2

Простое решение - сделать снимок памяти вашей памяти перед открытием окна и после и посмотреть, какой новый объект был выделен. Вы можете сделать это с помощью профилировщика памяти dotMemory.

Также в dotMemory вы можете автоматически увидеть, какие утечки обработчиков событий просочились.

0

Алексей сказал, как я буду обращаться к этой проблеме. Профилирование памяти может показать много проблем с программой.

Microsoft предоставляет два инструмента, которые вы можете использовать для этого. Один из них - CLR Profiler, а другой - Performance Analysis Tool, который также включает в себя информацию памяти CLR памяти. Я бы пошел с первым из этих двух.