Типы дескрипторов GDI

В настоящее время я пытаюсь отследить утечку дескриптора GDI. В настоящее время я использую GDIView, чтобы отследить его. Инструмент разделяет объекты GDI на категории Pen, ExtPen, Bitmap, Font, Palette, Region, DC, Metafile DC, Enhanced Metafile DC и Other GDI. Эти категории суммированы в столбце GDI Total. Поверх этого есть столбец All GDI. Именно в этой колонке я обнаруживаю утечку.

Поскольку у меня нет исходного кода для инструмента, я не могу понять, что на самом деле происходит. Автор инструмента пропустил тип ручки? Похоже на то. Я знаю, что есть утечка, потому что некоторые пользователи сообщают, что им показывают печально известное диалоговое окно Требуемый ресурс был (конец текста). Появление диалогового окна может занять несколько недель, поэтому я почти уверен, что это не DC.

Мы будем очень благодарны за любые идеи о том, как это отследить! Поскольку у меня ограниченный бюджет, о инструментах за тысячу долларов не может быть и речи. Отладки хуков в GDI было бы достаточно, так как я не против заниматься детективной работой.


person Jörgen Sigvardsson    schedule 25.07.2011    source источник


Ответы (2)


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

person Jörgen Sigvardsson    schedule 25.07.2011
comment
В GDI View отсутствуют некоторые типы объектов, но Icon - это объект USER, а не GDI. - person WebDancer; 03.04.2017

Однажды у меня возникла аналогичная проблема, и я использовал Диспетчер задач - попросил его показать количество дескрипторов GDI для каждого процесса и перешагнул через программный код, чтобы увидеть, где количество дескрипторов неожиданно увеличивается и не уменьшается обратно. Это заняло некоторое время, но, наконец, применив принцип «разделяй и властвуй», я обнаружил ошибку.

person sharptooth    schedule 25.07.2011
comment
Я действительно рекомендую программу GDIView, так как она покажет вам различные типы выделяемых объектов GDI. Кроме того, он дает вам механизм моментальных снимков / различий, так что вы можете измерить разницу между двумя точками времени. К сожалению, он не распознает ресурсы значков должным образом. - person Jörgen Sigvardsson; 25.07.2011