Obtenez de l'utilisation de la mémoire physique en mégaoctets
Je suis à la recherche pour de suite pour obtenir la quantité de mémoire physique utilisée en MO. Quelque chose comme dans le Gestionnaire des Tâches
Je suis actuel à l'aide de PerformanceCounter("Memory", "Available MBytes", true);
mais y compris les fichiers de page (je crois) qui n'est pas ce que je veux. Aussi, je veux que l'option d'obtenir la servir et non pas de la mémoire disponible.
L'application que je suis en train de travailler sur le, sera de surveiller l'utilisation de la mémoire physique, jusqu'à ce que le seuil est atteint. Ensuite, il va redémarrer quelques services windows.
Si vous curieux de savoir pourquoi je suis en train d'élaborer un tel programme. Certains de nos programmes ont des fuites de mémoire sur les serveurs, et nous avons pour redémarrer les services windows pour libérer de la mémoire, jusqu'à ce que nous trier toutes les fuites de mémoire, je fais cette demande pour aider à garder le serveur va, et réactif.
OriginalL'auteur ZioN | 2012-11-19
Vous devez vous connecter pour publier un commentaire.
À l'aide de PerformanceCounter classe, vous pouvez obtenir PF Utilisation détails:
Vous pouvez trouver toutes les catégories d'informations ici, Objet De Processus.
AJOUTÉ, vous pouvez également obtenir Mémoire Disponible détails à l'aide de
PerformanceCounter
:À l'aide de
PerformanceCounter
,NextValue()
méthode, vous pouvez obtenir le mémoire disponible valeur dansMB
, plus tard, vous pouvez le comparer avec le seuil valeur pour arrêter l'souhaité les Services Windows.Référence: Un Simple Compteur De Performance De L'Application
PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes", String.Empty, machineName);
mais cela ne me donne pas la mémoire physique utilisée, que ce qui est disponible. et il semble inclure les fichiers de page, qui est ce que je ne veux pas.Vous avez réellement besoin d'
new PerformanceCounter("Paging File", "% Usage", "_Total", machineName);
au lieu de vérifier la Mémoire Disponible. Puisque vous avez besoin de PF Utilisation détails au lieu donc essayez d'utiliser PerformanceCounter classe.Oui je comprends ce que vous dites pour être vrai. Mais alors comment se fait si nous avons 6 GO de mémoire sur le serveur, et le seuil est défini à, disons, de 4,5 GO, cela signifie que je dois définir mon application, à vérifier quand il y a 1,5 GO de disponible, il ne permet pas de démarrer le processus de redémarrer les services de windows, lorsque la mémoire comme indiqué dans le TM est à 4,5 GO?
Pour cela, vous devez avoir un contrôle sur la Mémoire Disponible au lieu de l'Utilisation de la PF,
new PerformanceCounter("Memory", "Available MBytes", String.Empty, machineName).NextValue();
. La valeur sera en MO plus tard, vous pouvez le convertir en GO et de le comparer avec le seuil.Donc, je vois-je besoin pour utiliser
PerformanceCounter("Memory", "Available MBytes", String.Empty, machineName)
je vois mon calculer pourrait avoir été mal, de l'utilisation de la mémoire disponible. Avoir 6 GO sur votre serveur, ne signifie pas que vous avez 6000MB exactement, mais plus comme 6143MB. Donc il n'a pas à démarrer le processus de redémarrage des services windows, parce qu'il avait encore un peu de MBs aller, selon le seuil. Pouvez-vous modifier votre réponse à cela, je peux le faire de la bonne réponse.OriginalL'auteur Furqan Safdar
Si vous n'avez pas l'esprit de l'appel à une fonction noyau. Le code c++ de le faire est:
Sur codeproject vous pouvez trouver comment appeler une fonction du noyau à partir de c#:
http://www.codeproject.com/Articles/1285/Calling-API-functions-using-C
OriginalL'auteur Toad
Personnellement, je voudrais l'utiliser avec l'API Win32
GlobalMemoryStatusEx
appel par l'intermédiaire du P/Invoke.Vous pouvez trouver plus de détails ici:- http://www.pinvoke.net/default.aspx/kernel32.globalmemorystatusex
OriginalL'auteur Lloyd