Помогите найти причину утечки памяти - PullRequest
0 голосов
/ 09 февраля 2010

У меня есть следующая ситуация утечки в VB.NET (.NET2) приложении: форма - DetailTache (TaskDetails) - в моем приложении MDI не собирается мусор, не собирается или открывается / близко.

Я сделал следующий профилирующий корень:

альтернативный текст http://lh6.ggpht.com/_1TPOP7DzY1E/S3Fg3ifizgI/AAAAAAAADC0/flRMOatEljs/s800/Capture2.png

Есть идеи, как можно устранить эту утечку? спасибо.

РЕДАКТИРОВАТЬ:

Результат поиска из проекта WinComboRowSelected Событие. В приложении есть 3 использования этого слова:

  1. Объявление в классе WinCombo: Event WinComboRowSelected(ByVal sender... (только один)
  2. Повышение: RaiseEvent WinComboRowSelected(sender, (3 повышения)
  3. Использование: ...e As Keolis.ctlWinCombo.WinCombo.WinComboRowSelectedEventArgs) Handles cmbProduit1.WinComboRowSelected (несколько ручек).

Нет другого использования этого события.

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

Ответы [ 5 ]

5 голосов
/ 09 февраля 2010

Подсказка, которая появляется в дереве объектов, выглядит для меня значимой. Вероятно, он связывает обработчик события для события RowSelected, чтобы он мог обновить подсказку. Очевидно, что вы используете сторонний контроль, он пахнет как Infragistics. Не компания, известная качеством своей продукции. Я также предположил бы, что ToolTip является внутренним для его элемента управления и что вы не можете получить к нему доступ, чтобы принудительно отписаться от обработчика событий. Помимо отказа от подсказок, если это вообще возможно, вы ничего не можете сделать, кроме как обратиться к поставщику за поддержкой. Или откажитесь от управления.

0 голосов
/ 13 февраля 2010

Как отмечалось nobugs (еще раз спасибо), проблема действительно заключалась в используемых сторонних компонентах - Infragistics.

Как я узнаю позже, команда Infragistics решила хранить статические ссылки на все добавленные элементы управления в памяти, чтобы поддерживать такие (вторичные imho) эффекты, как изменения темы XP.

Действительно полезной по проблеме была эта статья , решение, предоставленное в ведьме, заменило сохраненные в памяти объекты WeakReferences, которые могут быть собраны GC.

К счастью, мы использовали более старую версию Infragistics, которая в этой статье и решение работали. Жаль, однако, что Infragistics не планирует исправлять эти ошибки, даже заявленные много лет назад.

0 голосов
/ 09 февраля 2010

Есть ли в вашей форме обработчики событий, которые не были отписаны? Это будет основной причиной того, что элементы управления не будут собирать мусор.

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

0 голосов
/ 09 февраля 2010

VMMap предлагает гибкие представления для анализа памяти текущих процессов:

VMMap - это утилита для анализа виртуальной и физической памяти процесса. Он показывает разбивку типов выделенной виртуальной памяти процесса, а также объем физической памяти (рабочего набора), назначенный операционной системой этим типам. Помимо графического представления использования памяти, VMMap также показывает сводную информацию и подробную карту памяти процесса. Мощные возможности фильтрации и обновления позволяют определить источники использования памяти процесса и стоимость памяти для функций приложения.

0 голосов
/ 09 февраля 2010

Без вашего кода сложно сказать, как исправить утечку.

Помните, что бы сделать предмет не собранным мусором. Если бы еще была ссылка на объект.

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

Я бы прочитал эту статью для лучшего понимания сборки мусора.

...