Как найти утечку в пользовательских объектах

В нашем приложении .Net 4.0 есть утечка, которая приводит к сбою после продолжительного использования. После расследования я определил, что «Пользовательские объекты» просачивались. Объект пользователя — это ресурс Windows, как описано здесь:

http://msdn.microsoft.com/en-us/library/ms725486%28v=VS.85%29.aspx

Windows выделяет 10 000 пользовательских объектов на процесс. Другие ресурсы Windows, такие как объекты GDI и дескрипторы, остаются постоянными во время работы приложения.

Я нашел аналогичный вопрос для C ++, где для решения требовалось загрузить пакет под названием «обход» из исследования Microsoft — подвох? 10 тысяч долларов.

Я ПОДОЗРЕВАЮ, что с помощью профилировщика памяти Ant это связано с меню. Мы используем меню из SyncFusion, поэтому жизненный цикл вещей, связанных с меню, нельзя найти, заглянув в код. Так что это может быть ошибка, которую SynFusion должен решить.

У кого-нибудь есть аналогичная утечка с использованием меню SyncFusion? Ants говорит мне, что некоторые объекты PopupMenu остаются, но Ants не дает информации о том, как найти, где создаются объекты (и, таким образом, определить, где их удалить).

Утечка/обходы, упомянутые в упомянутом выше посте SO, выглядят интересными, потому что, похоже, они перехватывают определенные вызовы для выделения объекта USER.

Предложения приветствуются


person Mitch    schedule 03.06.2011    source источник
comment
Я бы начал смотреть на меню, которые вы сами создаете в коде. Может быть, создание контекстного меню в событии onchange или что-то в этом роде, перезаписывающее другое ваше меню. У меня были утечки с syncfusion Edit в прошлом, и при их устранении казалось, что это было довольно строго с правильной утилизацией.   -  person Jan-Peter Vos    schedule 03.06.2011


Ответы (1)


если вы знаете, что вокруг висят меню, вы сможете перечислить объекты GDI для вашего процесса и удалить их с помощью DeleteMenu().

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

это довольно грубая сила и не рекомендуется для .net, где такие низкоуровневые манипуляции с GDI, возможно, непослушны.

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

person MickyD    schedule 09.07.2011