5 Stimmen

Wie kann ich sehen, was sich auf dem Desktop Heap befindet?

Ich habe eine Anwendung, die in dieser Version etwa 100k mehr vom Desktop Heap verwendet als in der letzten Version. Gibt es eine Möglichkeit zu sehen, was sich auf dem Desktop Heap befindet und wie groß die einzelnen Objekte sind? Unter Dheapmon Ich konnte sehen, wie viel Prozent des Heaps ich benutzte, aber ich möchte mehr Details.

1voto

Chris Loer Punkte 190

Dheapmon ist das einzige Tool, das ich kenne, um den Desktop-Heap direkt zu betrachten, aber haben Sie versucht, Ihre Anwendung mit einem Tool wie Winspector um nach eklatanten Unterschieden zwischen den beiden Versionen zu suchen (z. B. eine Art von Steuerelement in Ihrer Anwendung enthält jetzt viel mehr Fenster)? Besteht die Möglichkeit, dass die Anwendung zu einer neueren Version des IE gewechselt hat? Ich meine mich daran zu erinnern, dass IE7 viel mehr Heap-Intensität auf dem Desktop hat als IE6...

1voto

Aardvark Punkte 8379

Gestohlen aus einem Kommentar zu einem Blogbeitrag aquí

Lass mich ein wenig Hintergrundwissen darüber geben, wie Desktop-Heap-Zuweisungen vorgenommen werden. Die Desktop-Heaps befinden sich im Kernel-Modus virtuellen Adressraum, so dass einzelne Desktop-Heap-Zuweisungen müssen von einer im Kernel-Modus laufenden Komponente Modus läuft. Insbesondere win32k.sys ist die einzige Komponente im Kernelmodus, die Desktop-Heap-Zuweisungen vornimmt. win32k.sys in der Kernel-Modus-Seite von Win32, und enthält sowohl den Fenstermanager (USER) und GDI. Es ist der Fenster Teil des Fenstermanagers von win32k.sys, der den Desktop-Heap. Die Funktionalität des Fenstermanagers ist den Prozessen ausgesetzt die im Benutzermodus laufen, durch user32.dll. Es ist user32.dll, die aufrufbare Funktionen für den Benutzermodus exportiert die in win32k.sys implementiert sind. Also wenn ein Prozess die user32.dll nicht lädt, wird er den Desktop-Heap nicht verwenden.

Bezüglich Ihrer Frage nach Einstellung einen Haltepunkt die den Desktop einfangen werden Heap-Zuweisungen abfängt... ja, es gibt eine solche Funktion - win32k!DesktopAlloc . Dies ist jedoch eine Kernel-Modus Funktion, und um einen Haltepunkt auf zu setzen, müssen Sie ein Kernel Debugger.

Für mich, der sich noch nie aus dem Benutzermodus von Windows herausgewagt hat, klingt das alles erschreckend kompliziert.

Als ich ein ähnliches Problem hatte, habe ich einfach überall im Startbereich unserer Anwendung Haltepunkte gesetzt. Bei jeder Unterbrechung beobachtete ich die Menge der zugewiesenen Handles und was dhelpmon mir sagte. Mit einer Art binärer Suche begann ich einzugrenzen, wo die Zuweisungen stattfanden.

-3voto

Stephen Nutt Punkte 3228

Sie können den Heap mit dem Win32-API-Aufruf HeapWalk . Sie können anrufen GetProcessHeap um alle Heaps zu erhalten, die dem Prozess zur Verfügung stehen, wenn Sie mehr als nur den Standard-Heap verwenden wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X