DA0018: aplicativo de 32 bits em execução em limites de memória gerenciada do processoDA0018: 32-bit Application running at process-managed memory limits

ID de regraRule Id DA0018DA0018
CategoriaCategory Uso das ferramentas de criação de perfilProfiling Tools Usage
Método de criação de perfilProfiling method AmostragemSampling
MensagemMessage Alocações de memória gerenciada que se aproximam do limite padrão para um processo de 32 bits.Managed memory allocations approaching the default limit for a 32-bit process. O aplicativo poderá ser associado à memória.Your application could be memory-bound.
Tipo de regraRule type AvisoWarning

Ao criar o perfil usando a amostragem, a memória do .NET ou métodos de contenção de recursos, é necessário coletar pelo menos 10 amostras para disparar essa regra.When you profile by using the sampling, .NET memory, or resource contention methods, you must collect at least 10 samples to trigger this rule.

CausaCause

Os dados do sistema coletados durante a execução de criação de perfil indicam que os heaps de memória do .NET Framework se aproximaram do tamanho máximo que os heaps gerenciados podem atingir em um processo de 32 bits.System data collected during the profiling run indicates the .NET Framework memory heaps approached the maximum size that the managed heaps can reach in a 32-bit process. Esse tamanho máximo é um valor padrão.This maximum size is a default value. Ele se baseia na quantidade total do espaço de endereço do processo que pode ser alocada a bytes privados.It is based on the total amount of the process address space that can be allocated for private bytes. O valor relatado é o valor máximo observado dos heaps enquanto o processo do qual o perfil está sendo criado estava ativo.The value reported is the maximum observed value of the heaps while the profiled process was active. Considere uma nova criação de perfil usando o método de criação de perfil da memória do .NET e otimização do uso de recursos gerenciados pelo aplicativo.Consider profiling again using the .NET memory profiling method and optimizing the use of managed resources by the application.

Quando o tamanho dos Heaps gerenciados se aproxima do limite padrão, o processo automático de coleta de lixo talvez precise ser invocado com mais frequência.When the size of the managed Heaps approach the default limit, the automatic garbage collection process might have to be invoked more frequently. Isso aumenta a sobrecarga de gerenciamento de memória.This increases the overhead of memory management.

A Regra é acionada apenas para aplicativos de 32 bits em execução em computadores de 32 bits.The Rule only fires for 32-bit applications running on 32-bit machines.

Descrição da regraRule description

O CLR (Common Language Runtime) do Microsoft .NET fornece um mecanismo de gerenciamento automático de memória que usa um coletor de lixo para recuperar a memória de objetos que não são mais usados pelo aplicativo.The Microsoft .NET common language run-time (CLR) provides an automatic memory management mechanism that uses a garbage collector to reclaim memory from objects that the application no longer uses. O coletor de lixo é orientado a geração, com base na suposição de que muitas alocações são de curta duração.The garbage collector is generation-oriented, based on the assumption that many allocations are short-lived. Variáveis locais, por exemplo, devem ser de curta duração.Local variables, for example, should be short-lived. Os objetos recém-criados iniciam na geração 0 (ger 0), em seguida, progridem para a geração 1 quando sobrevivem a uma execução da coleta de lixo e, por fim, fazem a transição para a geração 2 se ainda são usados pelo aplicativo.Newly created objects start in generation 0 (gen 0), and then they progress to generation 1 when they survive a garbage collection run, and finally transition to generation 2 if the application still uses them.

Objetos gerenciados maiores que 85 KB são alocados no Heap de Objetos Grandes, no qual estão sujeitos à coleta de lixo e à compactação menos frequentes do que objetos menores.Managed objects that are larger than 85 KB are allocated on the Large Object Heap, where they are subject to less frequent garbage collection and compaction than smaller objects. objetos grandes são gerenciados separadamente porque se presume que são mais persistentes e porque combinar objetos persistentes e grandes com objetos menores frequentemente alocados pode produzir a pior fragmentação do heap.large objects are managed separately because it is assumed that they are more persistent and because mixing persistent and large objects with frequently allocated smaller objects can produce worst-cast fragmentation of the heap.

Como o tamanho total dos heaps gerenciados se aproxima do limite padrão, a sobrecarga de gerenciamento de memória normalmente aumenta até o ponto em que pode começar a afetar a capacidade de resposta e a escalabilidade do aplicativo.As the total size of the managed heaps approach the default limit, the overhead of memory management usually increases to the point where it can start to impact the responsiveness and scalability of the application.

Como investigar um avisoHow to investigate a warning

Clique duas vezes na mensagem da janela Lista de Erros para navegar para a exibição Marcas.Double-click the message in the Error List window to navigate to the Marks view. Encontre as colunas Memória do .NET CLR\Nº de bytes em todos os heaps e Nº total de bytes confirmados.Find the .NET CLR Memory\# Bytes in all Heaps and # Total committed bytes columns. Determine se há fases específicas da execução do programa em que a alocação de memória gerenciada é mais pesada do que em outras fases.Determine if there are specific phases of program execution where managed memory allocation is heavier than other phases. Compare os valores da coluna Nº de bytes em todos os heaps com a taxa de coleta de lixo relatada nas colunas Memória do .NET CLR\Nº de coletas da Ger 0, Memória do .NET CLR\Nº de coletas da Ger 1 e Memória do .NET CLR\Nº de coletas da Ger 2 para determinar se o padrão de alocações de memória gerenciada está afetando a taxa de coleta de lixo.Compare the values of the # Bytes in all Heaps column to the rate of garbage collection reported in the .NET CLR Memory\# of Gen 0 Collections, .NET CLR Memory\# of Gen 1 Collections, and .NET CLR Memory\# of Gen 2 Collections columns to determine if the pattern of managed memory allocations is affecting the rate of garbage collection.

Em um aplicativo .NET Framework, o Common Language Runtime limita o tamanho total dos heaps gerenciados a um pouco menos do que uma metade do tamanho máximo da parte de área privada do espaço de endereço de um processo.In a .NET Framework application, the common language runtime limits the total size of the managed heaps to slightly less than one-half of the maximum size of the private area portion of a process address space. Para um processo de 32 bits em execução em um computador de 32 bits, 2 GB representa o limite superior da parte privada do espaço de endereço do processo.For a 32-bit processes running on a 32-bit machine, 2 GB represents the upper limit of the private portion of the process address space. Como o tamanho total dos Heaps gerenciados começa a se aproximar do limite padrão, a sobrecarga de gerenciamento de memória pode aumentar e o desempenho do aplicativo pode diminuir.As the total size of the managed Heaps begins to approach its default limit, the overhead of managing memory might increase and application performance can decrease.

Se o excesso de sobrecarga de memória gerenciada for um problema, considere uma destas opções:If excessive managed memory overhead is a problem, consider either of these options:

  • otimizando o uso de recursos de memória gerenciada do aplicativooptimizing the application's usage of managed memory resources

    -ou--or-

  • tomar medidas para aliviar as restrições de arquitetura em relação ao tamanho máximo de memória virtual para um processo de 32 bitstaking steps to relieve the architectural constraints on the maximum size of virtual memory for a 32-bit process

    Para otimizar o uso de recursos de memória gerenciada do aplicativo, colete dados de alocação de memória gerenciada em uma execução de criação de perfil de Alocação de Memória do .NET.To optimize the application's usage of managed memory resources, gather managed memory allocation data in a .NET Memory Allocation profiling run. Examine os relatórios Exibições de dados da memória do .NET para entender o padrão de alocação de memória do aplicativo.Review the .NET Memory Data Views reports to understand the application's pattern of memory allocation.

    Use a Exibição de Tempo de Vida do Objeto para determinar quais objetos de dados do programa estão sobrevivendo na geração e, em seguida, sendo recuperados dela.Use the Object Lifetime View to determine which of the program's data objects are surviving into generation and then being reclaimed from there.

    Use a Exibição de Alocações para determinar o caminho de execução que resultou nessas alocações.Use the Allocations View to determine the execution path that resulted in these allocations.

    Para obter mais informações sobre como melhorar o desempenho da coleta de lixo, consulte o artigo técnico sobre o .NET Framework Garbage Collector Basics and Performance Hints (Noções básicas sobre o coletor de lixo e dicas de desempenho) no site do MSDN.For more information about how to improve garbage collection performance, see .NET Framework technical article, Garbage Collector Basics and Performance Hints on the MSDN Web site.

    Para obter alívio de arquitetura das restrições de memória virtual em relação ao tamanho da parte privada de um espaço de endereço do processo, tente executar esse processo de 32 bits em um computador de 64 bits.To gain architectural relief from the virtual memory constraints on the size of the private portion of a process address space, try running this 32-bit process on a 64-bit machine. Um processo de 32 bits em um computador de 64 bits pode adquirir até 4 GB de memória virtual privada.A 32-bit process on a 64-bit machine can acquire up to 4 GB of private virtual memory.

    Um processo de 64 bits em execução em um computador de 64 bits pode adquirir até 8 TB de memória virtual.A 64-bit process running on a 64-bit machine can acquire up to 8 TB of virtual memory. Considere uma nova compilação do aplicativo para que ele seja executado como um aplicativo nativo de 64 bits.Consider recompiling the application to execute as a native 64-bit application. Essa regra se destina apenas a fins informativos e pode não exigir ação corretiva.This rule is for information only, and might not require corrective action.