Processus De La Taille De La Mémoire - Les Différents Compteurs
J'essaie de savoir de combien de mémoire de mon propre .Net serveur de processus (pour la surveillance et l'exploitation forestière).
Je suis en utilisant:
Process.GetCurrentProcess().PrivateMemorySize64
Cependant, le Processus de l'objet a plusieurs propriétés qui permettez-moi de lire l'espace mémoire utilisé:
Paginé, Non Paginée, PagedSystem, NonPagedSystem, Privé Virtuel, WorkingSet
et puis les "pics": qui je suppose qu'à stocker les valeurs maximales de ces derniers jamais pris.
Lecture par le biais de la MSDN définition de chaque propriété n'a pas révélé trop utile pour moi. Je dois avouer que mes connaissances sur la façon dont la mémoire est gérée (la pagination et le virtuel va) est très limitée.
Donc ma question est bien évidemment "qui dois-je utiliser?", et je sais que la réponse est "ça dépend".
Ce processus va tenir un tas de listes dans la mémoire des choses qui sont en cours, tandis que d'autres procédés de communiquer avec elle et de faire des requêtes pour des trucs. J'attends le serveur où tout cela va fonctionner sur à besoin de beaucoup de RAM, et je suis donc l'interrogation de ces données au fil du temps pour être en mesure d'estimer les besoins en RAM, comparativement à la taille des listes, il conserve à l'intérieur.
Alors... à Qui dois-je utiliser et pourquoi?
OriginalL'auteur Daniel Magliola | 2008-08-27
Vous devez vous connecter pour publier un commentaire.
Si vous voulez savoir à quel point la GC utilise essayer:
Si vous voulez savoir ce que votre processus utilise à partir de Windows (VM Taille de la colonne dans le gestionnaire de tâches), essayez:
Si vous voulez savoir ce que votre processus dans la mémoire vive (plutôt que dans le fichier d'échange) (colonne Utilisation de la mémoire dans le gestionnaire des tâches) à essayer:
Voir ici pour plus d'explication sur les différentes sortes de mémoire.
OriginalL'auteur
OK, j'ai trouvé grâce à Google la même page que Lars mentionné, et je crois que c'est une bonne explication pour les gens qui ne savent pas tout à fait comment la mémoire fonctionne (comme moi).
http://shsc.info/WindowsMemoryManagement
Ma courte conclusion a été:
Privé Octets = La Mémoire de mon processus a demandé de stocker des données. Certains de il peut être contacté à disque ou pas. C'est l'information que je cherchais.
Virtuel Octets = Les Octets Privés, en plus de l'espace partagé avec d'autres processus de chargement de Dll, etc.
Jeu de travail = La partie de la mémoire de mon processus qui n'a pas été paginée sur le disque. De sorte que le montant paginée sur le disque devrait être (Virtuel - Jeu de Travail).
Merci à tous pour votre aide!
OriginalL'auteur
Si vous souhaitez utiliser le "Memory (Jeu de Travail Privé)", comme indiqué dans le gestionnaire des tâches de Windows Vista, qui est l'équivalent de l'Explorateur de Processus "WS Octets Privés", voici le code. Probablement préférable de se débarrasser de cette boucle infinie dans un thread/tâche de fond pour les statistiques en temps réel.
OriginalL'auteur
Pour obtenir la valeur que le Gestionnaire des Tâches donne, mon chapeau à Mike Regan de la solution ci-dessus. Toutefois, un changement: il n'est pas:
perfCounter.NextValue()/1000;
maisperfCounter.NextValue()/1024;
(c'est à dire un réel kilo-octet). Cela donne la valeur exacte que vous voyez dans le Gestionnaire des Tâches.La suite est une solution complète pour l'affichage de l 'utilisation de la mémoire ğ (gestionnaire de Tâches, en tant que donnée) d'une manière simple dans votre WPF ou WinForms application (dans ce cas, tout simplement dans le titre). Suffit d'appeler cette méthode dans la nouvelle Fenêtre constructeur:
OriginalL'auteur
Jeu de travail n'est pas une bonne propriété à utiliser. De ce que je comprends, il inclut tout le processus peut toucher, même les bibliothèques partagées par plusieurs processus, de sorte que vous voyez double comptage des octets dans le compteur. Privé de la mémoire est un bien meilleur compteur à regarder.
OriginalL'auteur
Je vous suggère également de surveiller la façon dont souvent pagefaults arriver. Un pagefault se produit lorsque vous essayez d'accéder à certaines données qui ont été déplacés à partir de la mémoire physique de fichier d'échange et système de a à lire la page sur le disque avant de pouvoir accéder à ces données.
OriginalL'auteur
Est-ce une description juste? J'aimerais partager cela avec mon équipe afin de s'il vous plaît laissez-moi savoir si il est incorrect (ou incomplète):
Il y a plusieurs façons en C# pour demander combien la mémoire de mon processus.
Compte tenu de ce qui précède, voici quelques façons de mesurer l'utilisation de la mémoire en C#:
1) Processus.VirtualMemorySize64(): retourne tous les la mémoire utilisée par un processus gérés ou non, virtuelles ou chargée, privé ou partagé.
2) Processus.PrivateMemorySize64(): retourne tous les privés de mémoire utilisée par un processus gérés ou non, virtuelles ou chargé.
3) Processus.WorkingSet64(): retourne tous les secteurs privé, chargé de la mémoire utilisée par un processus géré ou non géré
4) GC.GetTotalMemory(): retourne la quantité de mémoire gérée observé par le garbage collector.
OriginalL'auteur