Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Le informazioni contenute in questo argomento sono valide per:
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
|---|---|---|---|---|
Express |
![]() |
![]() |
Solo nativo |
![]() |
Standard |
![]() |
![]() |
Solo nativo |
![]() |
Pro e Team |
![]() |
![]() |
Solo nativo |
![]() |
Legenda tabella:
![]() |
Si applica |
![]() |
Non applicabile |
![]() |
Comando o comandi nascosti per impostazione predefinita. |
Nota: |
|---|
È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida in linea a seconda delle impostazioni attive o dell'edizione del programma. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio. |
In questo argomento verrà illustrato come effettuare snapshot della memoria per individuare perdite di memoria.
Per rilevare una perdita di memoria
Creare un oggetto CMemoryState Members e chiamare la funzione membro CMemoryState::Checkpoint. Verrà creato il primo snapshot della memoria.
Dopo che il programma ha eseguito le operazioni di allocazione e disallocazione di memoria, creare un altro oggetto CMemoryState e chiamare Checkpoint per tale oggetto. Verrà creato un secondo snapshot dell'utilizzo della memoria.
Creare un terzo oggetto CMemoryState e chiamarne la funzione membro CMemoryState::Difference, fornendo come argomenti i due oggetti CMemoryState precedenti. Se esiste una differenza tra i due stati della memoria, la funzione Difference restituirà un valore diverso da zero, indicando così che alcuni blocchi di memoria non sono stati disallocati.
Il codice sarà del tipo riportato in questo esempio:
// 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" ); } #endifSi noti che le istruzioni relative al controllo della memoria sono racchiuse in blocchi #ifdef _DEBUG / #endif e vengono pertanto compilate solo nelle versioni di debug Win32 del programma.
Determinata l'esistenza di una perdita di memoria, sarà possibile utilizzare un'altra funzione membro, CMemoryState::DumpStatistics, per la Visualizzazione della statistica della memoria che consentirà di individuare la perdita.
.gif)
.gif)
.gif)
Nota: