Как я могу увидеть, что находится на рабочем столе кучи - PullRequest
4 голосов
/ 15 мая 2009

У меня есть приложение, которое использует примерно на 100 тыс. Кучи рабочего стола в этой версии больше, чем в прошлой версии. Есть ли способ узнать, что находится в куче рабочего стола и насколько велики отдельные объекты? Используя Dheapmon , я смог увидеть, какой процент кучи я использовал, но я хочу больше подробностей.

Ответы [ 3 ]

1 голос
/ 22 мая 2009

Украдено из комментария к сообщению в блоге здесь

Позволь мне дать небольшое представление о том, как Рабочие места кучи рабочего стола сделаны. куча рабочего стола в режиме ядра виртуальное адресное пространство, так индивидуально выделение кучи рабочего стола должно быть сделано компонентом, работающим в ядре Режим. В частности, win32k.sys является единственный компонент режима ядра, который делает распределение рабочего стола в куче. win32k.sys в режиме ядра на стороне Win32, и включает в себя как оконный менеджер (ПОЛЬЗОВАТЕЛЬ) и GDI. Это окно часть менеджера win32k.sys, которая использует куча рабочего стола. Функциональность оконный менеджер подвержен процессам работает в режиме пользователя через user32.dll. Это user32.dll, что экспортирует вызываемые функции пользовательского режима которые реализованы в win32k.sys. Так если процесс не загружает user32.dll, он не будет использовать кучу рабочего стола.

Относительно вашего вопроса о настройке точка останова , которая будет ловить рабочий стол выделения кучи ... да, есть такие функция - win32k! DesktopAlloc . Тем не менее, это режим ядра функция, и установить точку останова на для этого потребуется использовать ядро ​​ отладчик.

Это звучит очень страшно для меня, который никогда не выходил из режима пользователя в Windows.

Когда у меня возникла похожая проблема, я просто ставил точки останова по всей загрузочной части нашего приложения. На каждом перерыве я следил за уровнем выделенных ручек и тем, что говорил мне dhelpmon. Делая что-то вроде бинарного поиска, я начал выяснять, где происходит распределение.

0 голосов
/ 22 мая 2009

Dheapmon - единственный из известных мне инструментов для просмотра непосредственно в куче рабочего стола, но вы пробовали смотреть на свое приложение с помощью инструмента, подобного Winspector , чтобы найти явные различия между двумя версиями (скажем какой-то элемент управления в вашем приложении теперь содержит гораздо больше окон)? Есть ли шанс, что приложение перешло на более новую версию IE? Кажется, я помню, что IE7 был намного более интенсивным, чем IE6 ...

0 голосов
/ 16 мая 2009

Вы можете пройти кучу, используя вызов Win32 API HeapWalk . Вы можете вызвать GetProcessHeap , чтобы получить все кучи, доступные для процесса, если вам нужно пройти больше, чем просто куча по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...