Anzeigen einer Speicherstatistik
Dieses Thema gilt für folgende Anwendungsbereiche:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Nur "Systemeigen" |
||||
Pro, Premium und Ultimate |
Nur "Systemeigen" |
Durch die CMemoryState::Difference-Funktion werden die beiden Speicherzustandsobjekte verglichen und alle Objekte ermittelt, die zwischen dem Anfangs- und dem Endzustand nicht vom Heap freigegeben wurden. Nachdem Sie Speichersnapshots aufgezeichnet (Gewusst wie: Erstellen von Speichersnapshots) und diese mithilfe von CMemoryState::Difference verglichen haben, können Sie CMemoryState::DumpStatistics aufrufen, um Informationen über die nicht freigegebenen Objekte zu erhalten.
Betrachten Sie das folgende Beispiel:
if( diffMemState.Difference( oldMemState, newMemState ) )
{
TRACE( "Memory leaked!\n" );
diffMemState.DumpStatistics();
}
Ein Beispieldump dieses Codes sieht z. B. wie folgt aus:
0 bytes in 0 Free Blocks
22 bytes in 1 Object Blocks
45 bytes in 4 Non-Object Blocks
Largest number used: 67 bytes
Total allocations: 67 bytes
Bei freien Blöcken handelt es sich um die Blöcke, deren Freigabe verzögert wird, wenn afxMemDF auf delayFreeMemDF festgelegt wurde. Weitere Informationen hierzu finden Sie unter Gewusst wie: Aktivieren der Speicherdiagnose.
Die in der zweiten Zeile aufgeführten normalen Objektblöcke bleiben auf dem Heap reserviert.
Nicht-Objektblöcke umfassen Arrays und Strukturen, die mit new reserviert wurden. In diesem Fall wurden vier Elemente, die kein Objekt darstellen, auf dem Heap reserviert, jedoch nicht freigegeben.
Largest number used gibt an, wie viel Speicher vom Programm maximal reserviert wurde.
Total allocations gibt die gesamte, vom Programm genutzte Arbeitsspeicherkapazität an.
Siehe auch
Aufgaben
Gewusst wie: Erstellen von Speichersnapshots