DA0018 : Application 32 bits s'exécutant aux limites de la mémoire managée du processusDA0018: 32-bit Application running at process managed memory limits

ID de règleRule Id DA0018DA0018
CategoryCategory Utilisation des outils de profilageProfiling Tools Usage
Méthode de profilageProfiling method ÉchantillonnageSampling
MessageMessage Les allocations de mémoire managée sont proches de la limite pour un processus 32 bits.Managed memory allocations approaching the default limit for a 32-bit process. Votre application peut être liée à la mémoire.Your application could be memory-bound.
Type de règleRule type WarningWarning

Lorsque vous effectuez un profilage à l’aide de la méthode d’échantillonnage, de mémoire .NET ou de conflit des ressources, vous devez collecter au moins 10 échantillons pour déclencher cette règle.When you profile by using the sampling, .NET memory, or resource contention methods, you must collect at least 10 samples to trigger this rule.

CauseCause

Les données système collectées pendant le profilage indiquent que les tas de mémoire .NET Framework approchent de la taille maximale autorisée pour les tas managés d’un processus 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. Cette taille maximale est une valeur par défaut.This maximum size is a default value. Elle est basée sur la quantité totale d’espace d’adressage de processus pouvant être allouée pour les octets privés.It is based on the total amount of the process address space that can be allocated for private bytes. La valeur signalée correspond à la valeur maximale des tas qui a été observée quand le processus profilé était actif.The value reported is the maximum observed value of the heaps while the profiled process was active. Effectuez un nouveau profilage à l’aide de la méthode de profilage de mémoire .NET et optimisez la manière dont l’application utilise les ressources managées.Consider profiling again using the .NET memory profiling method and optimizing the use of managed resources by the application.

Si la taille des tas managés approche de la limite définie par défaut, il se peut que vous deviez appeler plus fréquemment le processus de garbage collection automatique.When the size of the managed Heaps approach the default limit, the automatic garbage collection process might have to be invoked more frequently. La surcharge de la gestion de la mémoire sera ainsi augmentée.This increases the overhead of memory management.

Cette règle se déclenche uniquement pour les applications 32 bits s’exécutant sur des ordinateurs 32 bits.The Rule only fires for 32-bit applications running on 32-bit machines.

Description de la règleRule Description

Le common language runtime (CLR) Microsoft .NET fournit un mécanisme de gestion automatique de la mémoire qui utilise un récupérateur de mémoire pour récupérer la mémoire des objets que l’application n’utilise plus.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. Le récupérateur de mémoire est orienté génération et repose sur l’hypothèse que de nombreuses allocations sont de courte durée.The garbage collector is generation-oriented, based on the assumption that many allocations are short-lived. Les variables locales, par exemple, doivent avoir une durée de vie courte.Local variables, for example, should be short-lived. Les objets récemment créés commencent à la génération 0 (gen 0), puis progressent jusqu’à la génération 1 lorsqu’ils survivent à l’exécution d’un garbage collection. Enfin, ils passent à la génération 2 si l’application les utilise toujours.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.

Les objets managés dont la taille est supérieure à 85 Ko sont alloués sur le tas des objets volumineux, où ils sont soumis à des garbage collections et à des compactages moins fréquents que les objets moins volumineux.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. Les objets volumineux sont gérés séparément, car ils sont supposés être plus persistants, et que l’association d’objets persistants et volumineux à des objets plus petits et fréquemment alloués peut causer une grave fragmentation du tas.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.

Lorsque la taille totale des tas managés approche de la limite définie par défaut, la surcharge de la gestion de mémoire augmente généralement jusqu’à affecter la réactivité et la scalabilité de l’application.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.

Comment rechercher la cause d’un avertissementHow to Investigate a Warning

Double-cliquez sur le message dans la fenêtre Liste d’erreurs pour accéder à la vue Marques.Double-click the message in the Error List window to navigate to the Marks view. Accédez aux colonnes Mémoire CLR .NET\Nombre d’octets dans tous les tas et Nombre total d’octets validés.Find the .NET CLR Memory\# Bytes in all Heaps and # Total committed bytes columns. Déterminez s’il existe des phases spécifiques de l’exécution du programme durant lesquelles l’allocation de mémoire allouée est plus importante.Determine if there are specific phases of program execution where managed memory allocation is heavier than other phases. Comparez les valeurs de la colonne Nombre d’octets dans tous les tas au taux de garbage collection signalé dans les colonnes Mémoire CLR .NET\Nombre de collections de la génération 0, Mémoire CLR .NET\Nombre de collections de la génération 1 et Mémoire CLR .NET\Nombre de collections de la génération 2, pour déterminer si le modèle des allocations de mémoire managée affecte le taux de garbage collection.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.

Dans une application .NET Framework, le common language runtime limite la taille totale des tas managés à une taille légèrement inférieure à la moitié de la taille maximale de la partie privée d’un espace d’adressage de processus.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. Pour un processus 32 bits s’exécutant sur un ordinateur 32 bits, la taille maximale de la partie privée de l’espace d’adressage de processus est de 2 Go.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. Lorsque la taille totale des tas managés commence à approcher de la limite par défaut, la surcharge de la gestion de mémoire peut augmenter et entraîner une baisse des performances de l’application.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.

Si une charge excessive de mémoire managée constitue un problème, envisagez l’une des options suivantes :If excessive managed memory overhead is a problem, consider either of these options:

  • Optimisez la manière dont l’application utilise les ressources de mémoire managée.optimizing the application's usage of managed memory resources

    - ou --or-

  • Allégez les contraintes architecturales associées à la taille maximale de la mémoire virtuelle d’un processus 32 bits.taking steps to relieve the architectural constraints on the maximum size of virtual memory for a 32-bit process

    Pour optimiser la manière dont l’application utilise les ressources de mémoire managée, collectez des données d’allocation de mémoire managée lors d’une exécution de profilage par allocation de mémoire .NET.To optimize the application's usage of managed memory resources, gather managed memory allocation data in a .NET Memory Allocation profiling run. Consultez les rapports Vues de données de mémoire .NET pour comprendre le modèle d’allocation de mémoire de l’application.Review the .NET Memory Data Views reports to understand the application's pattern of memory allocation.

    Consultez la vue Durée de vie des objets pour déterminer quels objets de données du programme passent d’une génération à une autre, puis sont récupérés.Use the Object Lifetime View to determine which of the program's data objects are surviving into generation and then being reclaimed from there.

    Consultez la vue Allocations pour connaître le chemin d’exécution qui a entraîné ces allocations.Use the Allocations View to determine the execution path that resulted in these allocations.

    Pour plus d’informations sur l’amélioration des performances du garbage collection, consultez l’article technique .NET Framework Garbage Collector Basics and Performance Hints sur le site 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.

    Pour alléger les contraintes architecturales de mémoire virtuelle associées à la taille de la partie privée d’un espace d’adressage de processus, exécutez ce processus 32 bits sur un ordinateur 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. Un processus 32 bits exécuté sur un ordinateur 64 bits peut acquérir jusqu’à 4 Go de mémoire virtuelle privée.A 32-bit process on a 64-bit machine can acquire up to 4 GB of private virtual memory.

    Un processus 64 bits exécuté sur un ordinateur 64 bits peut acquérir jusqu’à 8 To de mémoire virtuelle.A 64-bit process running on a 64-bit machine can acquire up to 8 TB of virtual memory. Recompilez l’application pour qu’elle s’exécute comme une application 64 bits native.Consider re-compiling the application to execute as a native 64-bit application. Cette règle possède un caractère informatif et ne nécessite pas forcément d’action corrective.This rule is for information only, and might not require corrective action.