Share via


Passo a passo – Usando a Ferramenta de Instrumentos da Apple

Este artigo explica como usar a ferramenta Instrumentos da Apple para diagnosticar problemas de memória em um aplicativo iOS compilado com o Xamarin. Demonstra como inicializar o Instrumentos, tirar instantâneos do heap e analisar o aumento da memória. Ele também mostra como usar o Instrumentos para exibir e identificar as linhas exatas do código que causam o problema de memória.

Esta página demonstra como usar a ferramenta de instrumentos do Xcode para diagnosticar um problema de memória em um aplicativo iOS.

Diagnosticando problemas de memória

  1. No Visual Studio para Mac, inicie Instrumentos no item de menu Ferramentas > Iniciar Instrumentos .

  2. Carregue o aplicativo no dispositivo escolhendo o item de menu Executar > upload para dispositivo.

  3. Escolha o modelo Alocações (ícone laranja com caixa branca)

    Escolha o modelo de alocações

  4. Selecione o aplicativo Demonstração de Memória na lista Escolher um modelo de criação de perfil para: na parte superior da janela. Clique no dispositivo iOS para expandir o menu que mostra os aplicativos instalados.

    Selecione o aplicativo Memory Demo

  5. Pressione o botão Escolher (canto inferior direito da janela) para iniciar Instrumentos. Este modelo mostrará dois itens no painel superior: Alocações e Controlador de VM.

  6. Pressione o botão Gravar (círculo vermelho no canto superior esquerdo) em Instrumentos, o que iniciará o aplicativo.

  7. Selecione a linha Controlador de VM no painel superior (agora que o aplicativo é executado, ele conterá duas seções: Tamanho Residente e Sujo). No painel Inspetor, escolha a opção Mostrar Configurações de Exibição (o ícone de engrenagem) e marque a caixa de seleção Instantâneo Automático, conforme mostrado no canto inferior direito desta captura de tela:

    Escolha a opção Mostrar Configurações de Exibição no ícone de engrenagem e, em seguida, marque a caixa de seleção de instantâneo automático

  8. Selecione a linha Alocações no painel superior (agora que o aplicativo é executado, ele indicará Todas as VMs Anônimas e Heap)

  9. No painel Inspetor, escolha a opção Mostrar Configurações de Vídeo (o ícone de engrenagem) e clique no botão Marcar Geração para estabelecer uma linha de base. Um pequeno sinalizador vermelho será exibido na linha do tempo na parte superior da janela

  10. Role o aplicativo e selecione Marcar Geração novamente (repetir algumas vezes)

  11. Clique no botão Parar.

  12. Expanda o nó Geração com o maior Crescimento e classifique por Crescimento (decrescente).

  13. Altere o painel Inspetor para Mostrar Detalhes Estendidos (o "E"), que mostra o Rastreamento de Pilha.

  14. Observe que o nó <não objeto> mostra o crescimento excessivo de memória. Clique na seta ao lado desse nó para ver mais detalhes – clique com o botão direito do mouse no rastreamento de pilha para adicionar Local de Origem ao painel:

    Adicione o local de origem ao painel

  15. Classifique por Tamanho e exiba Detalhes Estendidos:

    Classifique por Tamanho e exiba Detalhes Estendidos

  16. Clique na entrada desejada na pilha de chamadas para ver o código relacionado:

    Exibir o código relacionado

Nesse caso, uma nova imagem é criada e armazenada em uma coleção para cada célula, nem as células de exibição de coleção existente são reutilizadas.

Resolvendo problemas de memória

É possível resolver esses problemas e executar novamente o aplicativo por meio de Instrumentos.

Ao declarar uma única instância no nível de classe, a imagem pode ser reutilizada e o objeto de célula pode ser reutilizado por meio de um pool existente em vez de ser criado toda vez, conforme mostrado abaixo:

public override UICollectionViewCell GetCell (UICollectionView collectionView, NSIndexPath indexPath)
{
    // Dequeue a cell from the reuse pool
    var imageCell = (ImageCell)collectionView.DequeueReusableCell (cellId, indexPath);

    // Reuse the image declared at the class level
    imageCell.ImageView.Image = image;

    return imageCell;
}

Agora, quando o aplicativo é executado, o uso de memória é bastante reduzido – o Crescimento entre gerações agora é medido em Kib (quilobytes) em vez de MiB (megabytes), como era antes de corrigir o código:

Mostrar o uso de memória do aplicativo

O artigo Xamarin.iOS Garbage Collection é uma referência útil para lidar com problemas de memória com o Xamarin.iOS.

Resumo

Este artigo demonstrou como usar Instrumentos para diagnosticar problemas de memória. Ele descreveu como iniciar Instrumentos pelo Visual Studio para Mac, carregar o modelo de alocação de memória e passar a usar instantâneos para identificar problemas de memória. Por fim, o aplicativo foi examinado novamente para verificar se que o problema foi corrigido.