2010-09-21 4 views
3

Essayer d'obtenir le programme de travail ensemble privé d'un processus.Obtenez un processus de travail privé Set mémoire

Actuellement, je suis en mesure d'obtenir le jeu de travail sans problème, mais avoir du mal à obtenir le jeu de travail privé.

est ici Méthode:

private void GetProcessesForServer(string serverName) 
{ 
    var runningProcesses = new Process[0]; 

    try 
    { 
     runningProcesses = Process.GetProcesses(serverName); 

    } 
    catch (Exception e) 
    { 
     ResultsPanel.Controls.Add(new Label { Text = string.Format("There was an error: {0}", e.GetBaseException().Message) }); 
    } 

    IOrderedEnumerable<CustomProcess> processes = runningProcesses 
     .Select(process => new CustomProcess(process.Id, process.ProcessName, (process.WorkingSet64/1024))) 
     .ToList() 
     .OrderBy(process => process.ProcessName); 

    if (processes.Count() > 0) 
     ResultsLabel.Text = string.Format("Current running processes on {0}", ServerNamesDropDown.SelectedItem.Text); 

    ResultsGridView.DataSource = processes; 
    ResultsGridView.DataBind(); 
} 

Je suis en passant un nom de serveur, puis essayer d'obtenir tous les processus en cours d'exécution pour ce serveur de liaison puis la liste des processus à une vue de la grille. Tout fonctionne sans aucun problème, mais j'ai besoin d'obtenir l'ensemble de travail privé - semblable à ce que vous voyez dans le Gestionnaire des tâches de Windows - plutôt que l'ensemble de travail total.

Un grand merci, Tim

Répondre

2

Sous Windows Vista et au-delà, il y a le "travail - Privée" compteur de performance dans la catégorie "Process" (voir msdn).

Étant donné que vous êtes sur une telle plate-forme, vous pouvez utiliser la classe System.Diagonstics.PerformanceCounter pour interroger ces informations.

Pour établir un lien entre une pièce d'identité et une instance de compteur de performance donné processus, utilisez le compteur « Process ID » d'une catégorie. En d'autres termes: recherchez l'instance où le compteur "Processus d'ID" est votre ID de processus souhaité, la lire la valeur du compteur "Working Set - Private". Conseil: si vous devez interroger toutes les valeurs de tous les processus, utilisez plutôt l'appel System.Diagonstics.PerformanceCounterCategory.ReadCategory(), car il est beaucoup plus rapide de lire les compteurs individuels pour tous les processus/instances.

Mise à jour: Il y a un article sur codeproject qui montre comment calculer cette valeur sur XP/2000, si vous devez. Je ne l'ai pas testé, alors ne me blâmez pas ;-)

Mise à jour 2: Vous pouvez également vouloir vérifier ce stackoverflow question/answer.

Questions connexes