Compartilhar via


DA0018: aplicativo de 32 bits em execução em limites de memória gerenciada do processo

Identificação da Regra

DA0018

Categoria

Uso de Ferramentas de Criação de Perfil

Método de criação de perfil

Preparação de exemplos

Message (Mensagem)

Alocações de memória gerenciadas que aproximam o limite padrão para um processo de 32 bits.Seu aplicativo pode ser associada a.

Tipo de regra

Aviso

Quando você analisa usando a amostragem, a memória .NET ou os métodos de contenção de recurso, você deve coletar pelo menos 10 amostras para disparar esta regra.

Causa

Os dados do sistema coletados durante analisar executado indicam que os heaps de memória do .NET Framework aproximaram o tamanho máximo que os heaps gerenciados podem acessar em um processo de 32 bits.Esse tamanho máximo é um valor padrão.É com base na quantidade de espaço de endereço do processo que pode ser atribuído para bytes privados.O valor relatado observado é o valor máximo de heaps quando o processo analisado ativo.Considere analisar novamente usando memória .NET que o método que analisa e otimiza o uso de recursos gerenciados pelo aplicativo.

Quando o tamanho dos heaps gerenciados aproxima o limite padrão, o processo automático de coleta de lixo talvez precise ser invocado com mais frequência.Isso aumenta a sobrecarga de gerenciamento de memória.

A regra é acionado somente para os aplicativos de 32 bits executados em computadores de 32 bits.

Descrição da Regra

Microsoft .NET framework Common Language Runtime (CLR) fornece um mecanismo automático de gerenciamento de memória que use um coletor de lixo para recuperar a memória dos objetos que o aplicativo já não usa.O coletor de lixo geração- é orientado por, com base na suposição que muitas alocações sejam efêmeros.As variáveis locais, por exemplo, devem ser breves.Inicie o recém-criado de objetos na geração gen 0 (0), e em andamento para a geração 1 quando sobrevive a uma execução de coleta de lixo, e transições finalmente a geração 2 se o aplicativo ainda o usa.

Objetos gerenciados que são maiores que 85 KB são atribuídos no heap de objeto grande, onde estão sujeitos a menos coleta de lixo e consolidação frequentes de objetos menores. os objetos grandes são gerenciados separadamente porque se pressupõe que são mais persistentes e como misturar persistentes e objetos grandes com os objetos secundários geralmente atribuídos pode gerar a fragmentação incorreto- convertida do heap.

Como o tamanho total de heaps gerenciados aproxima o limite padrão, a sobrecarga de gerenciamento de memória aumenta normalmente ao ponto em que pode iniciar para afetar a resposta e a escalabilidade do aplicativo.

Como investigar um aviso

Clique duas vezes na mensagem na janela de lista de erros para navegar para modo Marcas.Localizar as colunas de Memória de .NET CLR \ # bytes em todos os heaps e de # Bytes confirmados do total .Determine se há etapas específicas de execução do programa onde a alocação de memória gerenciado é pesada mais do que as outras fases.Compare os valores da coluna de # Bytes em todos os heaps a taxa de coleta de lixo informada em Memória de .NET CLR \ # de coleções de Gen 0, em Memória de .NET CLR \ # de coleções de Gen 1, e em colunas de Memória de .NET CLR \ # de coleções de Gen 2 para determinar se o padrão de alocações de memória gerenciadas está afetando a taxa de coleta de lixo.

Em um aplicativo. NET Framework, Common Language Runtime limita o tamanho total de heaps gerenciados um pouco menos de um meio do tamanho máximo da parte privada da área de um espaço de endereço do processo.Para processos de 32 bits que são executados em um computador de 32 bits, 2 GB representam limite superior da parte privada do espaço de endereço do processo.Como o tamanho total de heaps gerenciados inicia a ver seu limite padrão, a sobrecarga de gerenciamento da memória e pode aumentar o desempenho do aplicativo pode diminuir.

Se a sobrecarga de memória excessiva gerenciado é um problema, considere qualquer uma destas opções:

  • otimizando o uso do aplicativo de recursos de memória gerenciadas

    - ou -

  • obtendo etapas para aliviar as restrições arquitetônicas no tamanho máximo de memória virtual de um processo de 32 bits

Para otimizar o uso do aplicativo de recursos de memória gerenciadas, colete dados gerenciados de alocação de memória na análise de alocação de memória do .NET executado.Revise os relatórios de Exibições de dados da memória do .NET das ferramentas de criação de perfil para entender o padrão do aplicativo de alocação de memória.

Use Exibição do tempo de vida do objeto para determinar qual dos objetos de dados do programa são sobrevivendo na geração e depois sendo recuperado de lá.

Use Exibição de alocações da memória do .NET para determinar o caminho de execução que resultou nestas alocações.

Para obter mais informações sobre como melhorar o desempenho de coleta de lixo, consulte ao .NET Framework o artigo técnico, Noções básicas do coletor de lixo e dicas de desempenho no site do MSDN.

Para garantir o relevo arquitetônico as restrições de memória virtual no tamanho da parte privada de um espaço de endereço do processo, tente realizar esse processo de 32 bits em um computador de 64 bits. Um processo de 32 bits em um computador de 64 bits é possível adquirir até 4 GB de memória virtual privada.

Um processo de 64 bits que é executado em um computador de 64 bits é possível adquirir até 8 TB de memória virtual.Considere a criação do aplicativo para ser executado como um aplicativo de 64 bits nativo.Esta regra é apenas para fins informativos, e não pode exigir a ação corretiva.