Sdílet prostřednictvím


Gewusst wie: Erstellen von Speichersnapshots

Aktualisiert: November 2007

Dieses Thema gilt für folgende Anwendungsbereiche:

Edition

Visual Basic

C#

C++

Web Developer

Express

Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Standard

Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Pro und Team

Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Tabellenlegende:

Thema ist vorhanden

Vorhanden

Thema ist nicht vorhanden

Nicht vorhanden

Thema ist vorhanden, Befehl wird jedoch standardmäßig verborgen

Befehl oder Befehle, die standardmäßig ausgeblendet sind.

8ky2wh64.alert_note(de-de,VS.90).gifHinweis:

Je nach den aktiven Einstellungen oder der verwendeten Version können sich die angezeigten Dialogfelder und Menübefehle von den in der Hilfe beschriebenen unterscheiden. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Unter diesem Thema wird erläutert, wie Sie Speichersnapshots 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 der erste Speichersnapshot erstellt.

  2. Nachdem das Programm alle Speicherreservierungen und -freigaben vorgenommen hat, erstellen Sie ein weiteres CMemoryState-Objekt und rufen Checkpoint für dieses Objekt auf. Dadurch wird ein zweiter Snapshot erstellt, der 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