J'ai écrit diverses applications basées sur la console C#, certaines d'entre elles ne fonctionnant pas longtemps, et qui peuvent avoir un grand nombre de pieds mémoire. Lorsque je regarde le moniteur de la fenêtre Windows via le gestionnaire de tâches, la même question revient constamment dans mon esprit; Comment puis-je obtenir une décomposition des objets nombre par type qui contribuent à cette empreinte; et lesquels sont f-atteignables et ceux qui ne le sont pas et peuvent donc être collectés. À de nombreuses reprises, j'ai effectué une inspection de code pour m'assurer que je ne retiens pas inutilement des objets plus longtemps que nécessaire et que je me débarrasse des objets avec la construction utilisée. J'ai aussi récemment cherché à utiliser la méthode CG.Collect quand j'ai libéré un grand nombre d'objets (par exemple dans une collection qui vient d'être effacée). Cependant, je ne suis pas sûr que cela fasse autant de différence, alors j'ai jeté ce code. Je suppose qu'il existe des outils dans la suite sysinternals qui peuvent aider à résoudre ces quiestions de type de mémoire, mais je ne suis pas sûr de savoir et comment les utiliser. L'alternative serait de payer pour un outil de profilage tiers tel que JetBrains dotTrace; mais je dois m'assurer d'avoir exploré les options gratuites avant de passer la main à mon manager.Quelle est la meilleure façon de trouver les allocations de mémoire d'un processus en termes d'objets C#
0
A
Répondre
0
Il est le Générateur de profils CLR qui vous permet de consulter différents graphes d'objets (je ne l'ai jamais utilisé):
Bien sûr, ANTS Profiler (essai gratuit) est un profileur souvent recommandé. Vous ne devriez pas avoir à collecter les ordures manuellement, le GC est une solution très intelligente qui sera probablement plus optimale que n'importe quel appel manuel. Une meilleure approche est d'être minimaliste avec le nombre d'objets que vous gardez en mémoire - et d'être débarrassé des objets lourds de mémoire dès que possible si la mémoire est la priorité.
Merci Adam, je viens d'essayer CLR Profiler à la fois sur mon ordinateur de bureau et sur un serveur d'application 64bit. Il s'est écrasé dans les deux circonstances pour des raisons différentes; les deux fois le profil de la même application. J'ai fait une recherche sur un problème avec le profileur CLR et j'ai trouvé qu'il y avait pas mal de problèmes de stabilité; donc je ne perdrai plus de temps à l'utiliser. Je vais prendre un look ANTS qui a l'air assez puissant et aussi JetBrains dotTrace. Merci pour votre imput – Zephilim