2009-01-20 4 views
26

J'automatise certaines tâches de profilage et je veux enregistrer en temps réel l'espace mémoire et les tailles de génération. Le profiling API semble terriblement compliqué pour ce dont j'ai besoin, et il semble écouter les allocations individuelles et les collections, ce qui n'est pas très important pour moi. Les outils de profilage sont une aide précieuse bien sûr, mais je cherchais une interface plus flexible et programmable.Existe-t-il un moyen de récupérer l'utilisation actuelle de la mémoire d'une application C#?

Répondre

39

Le terme «utilisation actuelle de la mémoire» est un peu défini vaguement. Voulez-vous dire l'ensemble de travail? Quoi que cela signifie, vous pouvez utiliser différentes propriétés telles que VirtualMemorySize, WorkingSet, PrivateMemorySize, etc. de la classe de processus pour le récupérer.

long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64; 
6

Il existe des compteurs de performance pour beaucoup de ces choses et si vous ne pouvez pas utiliser Perfmon, vous pouvez accéder aux compteurs via l'API Diagnostics.

3

Une fois que je devais trouver une fuite de mémoire dans un code existant, je suis tombé sur cette solution: Start « tasklist » avec les paramètres appropriés comme un processus et lire la sortie soit du flux ou de fichier.

par exemple.

tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH 

sortie est:

"notepad++.exe","7132","Console","1","21.004 K" 

Non pas élégant, mais fonctionne dans toutes les langues de programmation sous Windows sans autres dépendances (C++/Qt dans mon cas).

Questions connexes