Como: Tirar instantâneos da memória
Este tópico se aplica a:
Edição |
Visual Basic |
C# |
C++ |
Desenvolvedores Web |
---|---|---|---|---|
Express |
Somente nativo |
|||
Padrão |
Somente nativo |
|||
PRO e equipe |
Somente nativo |
Legenda de tabela:
Aplica-se |
|
Não é aplicada |
|
Comando ou comandos oculta por padrão. |
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolha Import and Export Settings no menu Tools.Para obter mais informações, consulte Configurações do Visual Studio. |
Este tópico mostra como tirar instantâneos de memória para ajudar a localizar um perda de memória.
Para detectar um perda de memória
Criar um CMemoryState membros objeto e a telefonar a CMemoryState::Checkpoint função de membro. Isso cria o primeiro instantâneo de memória.
Depois que o programa executa suas operações de alocação e desalocação de memória, criar outro CMemoryState objeto e a telefonar Checkpoint para esse objeto. Isso obtém um segundo instantâneo do Uso de Memória.
Crie uma terceira CMemoryState objeto e chamar seu CMemoryState::Difference função de membro, fornecendo sistema autônomo argumentos, sistema autônomo duas anteriores CMemoryState objetos. Se houver uma diferença entre a memória dois afirma, o Difference função retorna um valor diferente de zero. Isso indica que alguns blocos de memória tem não sido desalocada.
Este exemplo mostra a aparência do código:
// 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
Observe que as instruções de verificação de memória são bracketed por #ifdef _DEBUG / #endif bloqueia, de modo que eles são compilados apenas nas versões Win32 depurar de seu programa.
Agora que você sabe que existe um perda de memória, você pode usar outra função de membro, CMemoryState::DumpStatistics, para Visualização da estatística de memória o que ajudará a localizá-lo.