2009-01-28 21 views
2

Supposons que j'ai une application WinForms .NET écrite en C#. Cette application alloue de grandes quantités de mémoire à partir des tas gérés et non gérés. Je peux (relativement) facilement comprendre les détails de l'allocation (qui, quand, combien, etc.) des objets gérés en utilisant des outils comme Red Gate ANTS Profiler (que je n'ai pas utilisé) ou JetBrains dotTrace. Là où je rencontre des problèmes, c'est quand les objets gérés utilisent des ressources natives importantes (Image par exemple, ou de grands objets COM) ou quand j'appelle des bibliothèques tierces non gérées avec des besoins en mémoire importants. Jusqu'à présent, je dois vraiment faire un travail de détective pour comprendre 1) est-ce le code géré ou non géré qui est le cochon de la mémoire et 2) qui utilise une grande partie du tas non géré. La seule technique que j'ai pour le moment est de définir des compteurs de performance dans perfmon qui comparent les tailles de tas managées et non managées, les allocations, etc. Si le tas non géré continue de croître alors que le tas géré est stable, je sais commencez à regarder les bibliothèques non managées et/ou les objets .NET qui consomment des ressources natives.Quels outils et techniques puis-je utiliser pour détecter et isoler l'utilisation de mémoire élevée dans les applications .NET qui font appel à du code important non géré?

Quelle est la meilleure combinaison d'outils et de techniques pour aider les développeurs avec des quantités significatives de code non géré et? MISE À JOUR: Pour être plus clair, j'aimerais savoir comment détecter les problèmes de mémoire (utilisation élevée, fuites) dans le code non géré appelé à partir du code managé. Des produits comme dotTrace, je crois, ne font que suivre les objets gérés.

+0

passez en revue votre code avec ces conseils: [Erreurs de programmation courantes pour les développeurs .NET à éviter?] [1] [1]: http: //stackoverflow.com/questions/380819/common-programming-mistakes-for-net -développeurs-à-éviter – lsalamon

Répondre

0

Vous pouvez obtenir un aperçu en regardant simplement les nombreux compteurs de mémoire .NET disponibles dans Perfmon. Si vous souhaitez utiliser un outil gratuit, Debugging Tools for Windows (spécifiquement WinDbg + SoS) peut vous indiquer pourquoi les objets ne sont pas collectés comme prévu.

0

Memory Validator Vous pouvez tout savoir sur la mémoire non gérée (nativement) allouée dans votre application .Net ou une application .Net en mode mixte ou une application native.