Analisar o uso da memória dos aplicativos da Store (VB, C#, C++)
No Visual Studio 2013 Update 2, você pode usar a ferramenta Uso de Memória no hub de Desempenho e Diagnóstico para analisar o uso de memória de aplicativos de Tempo de Execução do Windows gravados em C#, Visual Basic ou C++ e XAML. Em especial, você pode:
Monitorar o uso de memória do seu aplicativo diretamente no Visual Studio enquanto estiver desenvolvendo um cenário. Você não precisa usar ferramentas do sistema ou de terceiros.
Criar instantâneos detalhados do estado de memória do seu aplicativo em um único clique.
Comparar instantâneos para encontrar a causa raiz de problemas de memória sutis ou complexos.
Dica
Este tópico descreve como usar a ferramenta Uso de Memória para analisar aplicativos C# e Visual Basic.
O hub de Desempenho e Diagnóstico oferece muitas opções para executar e gerenciar uma sessão de diagnóstico.Por exemplo, você pode executar a ferramenta Uso da CPU em aplicativos do Windows Phone ou da Windows Store ou executar a sessão de diagnóstico no computador com Visual Studio, em um Windows Phone, em um dispositivo da Windows Store ou em um dos emuladores ou simuladores do Visual Studio.Consulte Executar ferramentas de análise na página Desempenho e Diagnóstico.
Se você quer analisar o uso de memória no aplicativo da Windows Store que usa JavaScript e HTML, veja Analisar o uso de memória (JavaScript).
Para obter mais informações sobre a ferramenta Uso de Memória, incluindo como analisar aplicativos C++ e C++/Cx, veja Como diagnosticar problemas de memória com a nova ferramenta Uso de Memória no Visual Studio no blog Microsoft Application Lifecycle Management.
Iniciar uma a sessão de diagnóstico de uso de memória
Abra seu projeto no Visual Studio.
Na barra de menus, escolha Depurar, Desempenho e Diagnóstico.
Na página do hub de Desempenho e Diagnóstico, selecione Uso de Memória e escolha o botão Iniciar.
Escolher o modo de criação de perfil
Você pode testar um componente nativo junto com o aplicativo gerenciado que é o projeto de inicialização. Ou, talvez o aplicativo gerenciado é apenas um equipamento de teste e você só está interessado na memória nativa. Ou, você pode querer saber a relação entre seu aplicativo gerenciado e o Tempo de Execução do Windows. Em situações como essas, escolha Configurações e selecione o idioma ou idiomas de destino.
Monitorar o uso de memória
Embora você possa usar a ferramenta Uso de Memória para gerar relatórios detalhados que podem ser usados para encontrar e corrigir problemas, você também pode usá-la para estudar os efeitos de memória em tempo real de um cenário que está desenvolvendo ativamente.
Quando você inicia uma sessão de diagnóstico, seu aplicativo é iniciado e a página Desempenho e Diagnóstico exibe um gráfico de linha de tempo do uso de memória do aplicativo.
Quando seu aplicativo é executado, você pode tentar uma nova funcionalidade ou estudar cenários que podem dar problemas. O gráfico de linha de tempo de uso de memória mostra flutuações na memória do seu aplicativo, conforme ele é executado.
Picos no gráfico geralmente indicam que uma rotina no aplicativo está coletando ou criando dados e, em seguida, descartando-os quando o processamento é concluído. Grandes picos indicam métodos que você pode otimizar. O que mais preocupa é o aumento no consumo de memória que não é devolvido, pois pode indicar uso de memória ineficiente ou mesmo uma perda de memória.
Fechar uma sessão de monitoramento
Para parar uma sessão de monitoramento sem criar um relatório, apenas feche a janela de diagnóstico. Para gerar um relatório quando você tirou instantâneos de memória, escolha Parar.
Tirar instantâneos para analisar o estado de memória do aplicativo
Se descobrir um problema de memória que você deseja investigar, é possível tirar instantâneos durante a sessão de diagnóstico para capturar objetos de memória em momentos particulares. Como o aplicativo usa uma grande variedade de tipos de objetos, talvez você queira concentrar sua análise em um cenário. Também é uma boa ideia obter um instantâneo de linha de base do aplicativo antes de aparecer um problema de memória, outro instantâneo após a primeira ocorrência do problema e um ou mais instantâneos adicionais se você puder repetir o cenário.
Para a coleta de instantâneos, inicie uma nova sessão de diagnóstico. Escolha Tirar Instantâneo quando quiser capturar os dados da memória. Para gerar um relatório, escolha Parar.
Página de visão geral de uso de memória
Depois de parar a coleta de dados, a ferramenta Uso de Memória para o aplicativo e exibe o relatório geral.
Exibições de instantâneo de uso de memória
Você usa as exibições de instantâneos para abrir relatórios detalhados em novas janelas do Visual Studio. Há dois tipos de exibições de instantâneos:
Um Relatórios de detalhes do instantâneo mostra os tipos e as instâncias em um instantâneo.
Um Relatórios de diferença (diff) entre instantâneos compara os tipos e as instâncias em dois instantâneos.
Os itens numerados na imagem de exibição do instantâneo são links que abrem exibições de relatório de uso de memória.
O texto do link mostra o número total de bytes na memória quando o instantâneo foi tirado. Selecione esse link para exibir um relatório de detalhes do instantâneo, que é classificado pelo tamanho total de instâncias do tipo. |
|
O texto do link mostra o número total de objetos na memória quando o instantâneo foi tirado. Selecione esse link para exibir um relatório de detalhes do instantâneo, que é classificado pela contagem de instâncias dos tipos. |
|
O texto do link mostra a diferença entre o tamanho total de objetos na memória no momento desse instantâneo e o tamanho total do instantâneo anterior. O texto do link é um número positivo quando o tamanho da memória desse instantâneo for maior do que o anterior, e um número negativo quando o tamanho for menor. O texto do link Linha de Base indica que esse instantâneo é o primeiro na sessão de diagnóstico; Nenhuma Diferença indica que a diferença é igual a zero. Escolha esse link para exibir um relatório diferente do instantâneo, que é classificado pela diferença no tamanho total das instâncias dos tipos. |
|
O texto do link mostra a diferença entre o tamanho total de objetos de memória nesse instantâneo e o número de objetos no instantâneo anterior. Escolha esse link para exibir um relatório diferente do instantâneo, que é classificado pela diferença na contagem total das instâncias dos tipos. |
Relatórios de instantâneos
Árvores de relatórios de instantâneos
Heap Gerenciado
A árvore de heap gerenciado Árvore de Heap Gerenciado (detalhes do instantâneo) e a Árvore de Heap Gerenciado (diferença entre instantâneos) mostram os tipos e as instâncias no relatório. Escolher um tipo ou instância exibe as árvores Caminhos para a Raiz e Objetos Referenciados do item selecionado.
Caminhos para a Raiz
O Árvore de Caminhos para a Raiz (detalhes do instantâneo) e o Árvore de Caminhos para a Raiz (diferenças entre instantâneos) mostram a cadeia de objetos que mencionam o tipo ou a instância. O coletor de lixo .NET Framework limpa a memória de um objeto apenas quando todas as referências a ele foram liberadas.
Objetos Referenciados
O Árvore de Objetos Referenciados (detalhes do instantâneo) e o Árvore de Objetos Referenciados (diferenças entre instantâneos) mostram a cadeia de objetos que o tipo ou a instância selecionada menciona.
Campos Tipo de Objeto e Instância
Quando uma entrada Tipo de Objeto tem entradas filho, você pode escolher o ícone de seta para exibi-las. Se a cor do texto do Tipo de Objeto for azul, você pode escolhê-lo para navegar para o objeto em seu arquivo de código-fonte. O arquivo de origem é aberto em uma janela separada.
Os nomes de instância são IDs exclusivas geradas pela ferramenta Uso de Memória.
Dica
Se você notar um tipo que não pode ser identificado facilmente ou se não souber como ele está envolvido no código, não se preocupe.Provavelmente, é um objeto do Framework, do sistema operacional ou do compilador que a ferramenta Uso de Memória exibe porque está envolvido nas cadeias de propriedade de seus objetos.
Filtros da árvore de relatórios
A maioria dos aplicativos contém um número surpreendentemente grande de tipos, a maioria dos quais não são muito interessantes para o desenvolvedor do aplicativo. A ferramenta Uso de Memória define dois filtros que podem ser usados para ocultar a maioria desses tipos nas árvores de Heap Gerenciado e Caminhos para a Raiz. Você também pode filtrar uma árvore pelo nome do tipo.
Filtrar
Digite uma cadeia de caracteres na caixa Filtro para restringir as exibições de árvore a tipos que contêm o texto especificado. O filtro não diferencia maiúsculas de minúsculas e reconhece a cadeia de caracteres especificada em qualquer parte dos nomes do tipo.
Recolher Pequenos Objetos
Quando esse filtro é aplicado, os tipos cujo Tamanho (Bytes) é inferior a 0,5 por cento do tamanho total da memória do instantâneo são escondidos na lista de Heap Gerenciado.
Apenas Meu Código
O filtro Apenas Meu Código oculta a maioria das instâncias geradas pelo código externo. Tipos externos são de propriedade do sistema operacional, de componentes do Framework ou gerados pelo compilador.
Relatórios de detalhes do instantâneo
Você usa um relatório de detalhes do instantâneo para se concentrar em um instantâneo de uma sessão de diagnóstico. Para abrir um relatório de detalhes, escolha um dos links em uma exibição de instantâneo, como mostrado na figura a seguir. Os dois links abrem o mesmo relatório; a única diferença é a ordem de classificação inicial da árvore Heap Gerenciado no relatório. Em ambos os casos, você pode mudar a ordem de classificação depois que o relatório abre.
O link MB classifica o relatório pela coluna Tamanho Inclusivo (Bytes).
O link objetos classifica o relatório pela coluna Contagem.
Árvore de Heap Gerenciado (detalhes do instantâneo)
A árvore Heap Gerenciado lista os tipos de objetos que são mantidos na memória. Você pode expandir um nome do tipo para ver as dez maiores instâncias do tipo, classificadas por tamanho. Escolher um tipo ou instância exibe as árvores Caminhos para a Raiz e Objetos Referenciados do item selecionado.
Tipo de Objeto |
O nome do tipo ou instância de objeto. |
Contagem |
O número de instâncias do objeto do tipo. O número é sempre 1 para uma instância. |
Tamanho (Bytes) |
No caso de um tipo, o tamanho de todas as instâncias do tipo no instantâneo de memória, excluindo o tamanho dos objetos contidos nas instâncias. No caso de uma instância, o tipo, o tamanho do objeto excluindo o tamanho dos objetos contidos na instância. instâncias. |
Tamanho Inclusivo (Bytes) |
O tamanho das instâncias do tipo ou o tamanho de uma única instância, incluindo o tamanho dos objetos contidos. |
Árvore de Caminhos para a Raiz (detalhes do instantâneo)
A árvore de Caminhos para a Raiz mostra a cadeia de objetos que mencionam o tipo ou a instância. O coletor de lixo .NET Framework limpa a memória de um objeto apenas quando todas as referências a ele foram liberadas.
Ao visualizar um tipo na árvore de Caminhos para a Raiz, o número de objetos dos tipos que possuem referências a esse tipo é exibido na coluna Contagem de Referência. A coluna não aparece quando você analisa uma instância.
Árvore de Objetos Referenciados (detalhes do instantâneo)
A árvore de Objetos Referenciados mostra os objetos que mencionam o tipo ou a instância escolhida.
Tipo/Instância de objeto |
O nome do tipo ou instância de objeto. |
Tamanho (Bytes) |
No caso de um tipo, o tamanho de todas as instâncias do tipo, excluindo o tamanho dos objetos contidos no tipo. No caso de uma instância, o tamanho do objeto, excluindo o tamanho dos objetos contidos no objeto. |
Tamanho Inclusivo (Bytes) |
O tamanho total das instâncias do tipo ou o tamanho da instância, incluindo o tamanho dos objetos contidos. |
Relatório de diferenças (dif) do instantâneo
O relatório de diferença (dif) do instantâneo mostra as mudanças entre um instantâneo primário e o instantâneo que foi tirado imediatamente antes dele. Para abrir um relatório de diferença, escolha um dos links em uma exibição de instantâneo, como mostrado na figura a seguir. Os dois links abrem o mesmo relatório; a única diferença é a ordem de classificação inicial da árvore Heap Gerenciado no relatório. Você pode mudar a ordem de classificação depois que o relatório abre.
O link MB classifica o relatório pela coluna Tamanho Inclusivo (Bytes).
O link objetos classifica o relatório pela coluna Contagem.
Árvore de Heap Gerenciado (diferenças de instantâneo)
A árvore Heap Gerenciado lista os tipos de objetos que são mantidos na memória. Você pode expandir um nome do tipo para ver as dez maiores instâncias do tipo, classificadas por tamanho. Escolher um tipo ou instância exibe as árvores Caminhos para a Raiz e Objetos Referenciados do item selecionado.
Observe que as colunas Contagem, Tamanho (Bytes) e Tamanho Inclusivo (Bytes) foram recolhidas na imagem.
Tipo de Objeto |
O nome do tipo ou instância de objeto. |
Contagem |
O número de instâncias de um tipo no instantâneo primário. Contagem é sempre 1 para uma instância. |
Dif. de Contagem |
No caso de um tipo, a diferença no número de instâncias do tipo entre o instantâneo primário e o instantâneo anterior. O campo fica em branco no caso de uma instância. |
Tamanho (Bytes) |
O tamanho dos objetos no instantâneo primário, excluindo o tamanho dos objetos contidos nos objetos. No caso de um tipo, Tamanho (Bytes) e Tamanho Inclusivo (Bytes) são os totais dos tamanhos das instâncias de tipo. |
Dif. de Tamanho Total (Bytes) |
No caso de um tipo, a diferença no tamanho total de instâncias do tipo entre o instantâneo primário e o instantâneo anterior, excluindo o tamanho dos objetos contidos nas instâncias. O campo fica em branco no caso de uma instância. |
Tamanho Inclusivo (Bytes) |
O tamanho dos objetos no instantâneo primário, incluindo o tamanho dos objetos contidos nos objetos. |
Diferença de Tamanho Inclusivo (Bytes) |
No caso de um tipo, a diferença no tamanho de todas as instâncias do tipo entre o instantâneo primário e o instantâneo anterior, incluindo o tamanho dos objetos contidos nos objetos. O campo fica em branco no caso de uma instância. |
Árvore de Caminhos para a Raiz (diferenças do instantâneo)
A árvore de Caminhos para a Raiz mostra a cadeia de objetos que mencionam o tipo ou a instância. O coletor de lixo .NET Framework limpa a memória de um objeto apenas quando todas as referências a ele foram liberadas.
Árvore de Objetos Referenciados (diferenças do instantâneo)
A árvore de Objetos Referenciados mostra a cadeia de objetos que mencionam o tipo primário ou a instância.
Tipo/Instância de objeto |
O nome do tipo ou instância de objeto. |
Tamanho (Bytes) |
No caso de uma instância, o tamanho do objeto no instantâneo primário, excluindo o tamanho dos objetos contidos na instância. No caso de um tipo, o tamanho total das instâncias do tipo no instantâneo primário, excluindo o tamanho dos objetos contidos na instância. |
Tamanho Inclusivo (Bytes) |
O tamanho dos objetos no instantâneo primário, incluindo o tamanho dos objetos contidos nos objetos. |
Consulte também
Conceitos
Analisar o uso da memória (JavaScript)
Executar ferramentas de análise na página Desempenho e Diagnóstico
Outros recursos
Práticas Recomendadas para aplicativos da Windows Store usando C++, C# e Visual Basic