Gewusst wie: Erstellen von Speichersnapshots

Dieses Thema gilt für folgende Anwendungsbereiche:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

Thema ist nicht vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Pro, Premium und Ultimate

Thema ist nicht vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Tipp

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.

Unter diesem Thema wird erläutert, wie Sie Speichermomentaufnahmen erstellen, um einen Speicherverlust zu ermitteln.

So stellen Sie einen Speicherverlust fest

  1. Erstellen Sie ein CMemoryState Members-Objekt, und rufen Sie die CMemoryState::Checkpoint-Memberfunktion auf. Dadurch wird die erste Speichermomentaufnahme erstellt.

  2. Nachdem das Programm alle Speicherbelegungen und -freigaben vorgenommen hat, erstellen Sie ein weiteres CMemoryState-Objekt und rufen Checkpoint für dieses Objekt auf. Dadurch wird eine zweite Momentaufnahme erstellt, die Aufschluss über die Arbeitsspeichernutzung gibt.

  3. Erstellen Sie ein drittes CMemoryState-Objekt, rufen Sie die zugehörige CMemoryState::Difference-Memberfunktion auf, und übergeben Sie die ersten beiden CMemoryState-Objekte als Argumente. Wenn sich die beiden Speicherzustände unterscheiden, gibt die Difference-Funktion einen Wert ungleich 0 (Null) zurück. Dies deutet darauf hin, dass einige Speicherblöcke nicht freigegeben wurden.

    Dieses Beispiel veranschaulicht den dazugehörigen Code:

    // Declare the variables needed
    #ifdef _DEBUG
        CMemoryState oldMemState, newMemState, diffMemState;
        oldMemState.Checkpoint();
    #endif
    
        // Do your memory allocations and deallocations.
        CString s("This is a frame variable");
        // The next object is a heap object.
       CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
    
    #ifdef _DEBUG
        newMemState.Checkpoint();
        if( diffMemState.Difference( oldMemState, newMemState ) )
        {
            TRACE( "Memory leaked!\n" );
        }
    #endif
    

    Beachten Sie, dass die Speicherüberprüfungsanweisungen in #ifdef _DEBUG / #endif-Blöcke eingeschlossen sind und daher nur in Win32-Debugversionen des Programms kompiliert werden.

    Da Sie nun wissen, dass ein Speicherverlust auftritt, können Sie eine andere Memberfunktion, CMemoryState::DumpStatistics, zum Anzeigen einer Speicherstatistik verwenden, um die Stelle zu lokalisieren.

Siehe auch

Referenz

_DEBUG

Weitere Ressourcen

Speicherverlusterkennung in MFC