Получить процессы Private Working Set memory - PullRequest
3 голосов
/ 21 сентября 2010

Попытка программно получить частный рабочий набор процесса.

В настоящее время я могу получить рабочий набор без проблем, но возникают проблемы с получением частного рабочего набора.

Вот метод:

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();
}

Итак, я передаю имя сервера, затем пытаюсь получить все запущенные процессы для этого сервера, а затем связываю список процессов с представлением таблицы. Все работает без каких-либо проблем, однако мне нужно получить личный рабочий набор - аналогично тому, что вы видите в диспетчере задач Windows - а не полный рабочий набор.

Большое спасибо, Тим

1 Ответ

2 голосов
/ 21 сентября 2010

В Windows Vista и более поздних версиях имеется счетчик производительности «Рабочий набор - частный» в категории «Процесс» (см. msdn ).

Если вы находитесь на такой платформе,может использовать класс System.Diagonstics.PerformanceCounter для запроса этой информации.

Чтобы установить связь между идентификатором процесса и данным экземпляром счетчика производительности, используйте счетчик «Идентификатор процесса» категории.Другими словами: ищите экземпляр, в котором счетчик «Идентификатор процесса» - это требуемый идентификатор процесса, считайте значение счетчика «Рабочий набор - частный».

Подсказка: если вам нужно запросить все значения длявместо этого все процессы используют вызов System.Diagonstics.PerformanceCounterCategory.ReadCategory(), поскольку он намного быстрее считывает отдельные счетчики для всех процессов / экземпляров.

Обновление: В статье codeproject * 1016 есть статья* который показывает, как рассчитать это значение в XP / 2000, если необходимо.Я не проверял это, так что не вините меня; -)

Обновление 2 : Вы можете также захотеть проверить этот stackoverflow вопрос / ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...