Ercan Sormaz Ответов: 3

Как рассчитать использование памяти каждой из служб windows с помощью C#


# Решено я хочу сделать приложение Windows Form, которое показывает все службы Windows и использование памяти, и хочу перезапустить службу, которая использует определенный объем памяти. Нет проблем с доступом к службам, но нет понятия, как рассчитать использование памяти.

Что я уже пробовал:

Я получаю доступ к службам с помощью ServiceController.

CHill60

Как вы "получаете доступ" к услугам? Покажите свой код

Ercan Sormaz

ServiceController[] scServices;
scServices = ServiceController.GetServices();
foreach (ServiceController scTemp в scServices)
{

if (scTemp.Status == ServiceControllerStatus.Бегущий)
{
listBox4.Предметы.Добавить("услуги" + scTemp.Имя_службы).Метод toString();
listBox5.Items.Add("отображаемое имя:" + scTemp.DisplayName).Метод toString();
}

3 Ответов

Рейтинг:
24

Sagar-Jaybhay

Вы можете попробовать использовать загрузку профиля clr с сайта microsoft. И дать путь в EXE-файл, он будет дать память.


Ercan Sormaz

Спасибо за ваш совет.

Рейтинг:
2

Ercan Sormaz

Эта ссылка[^] решил мою проблему. Спасибо всем.


Рейтинг:
18

CHill60

в системе.Пространство имен диагностики использует a Класс Процесса[^]. См. свойства для размера памяти

Видеть это ссылка[^] для примера того, как получить объект процесса из данного ServiceController


Ercan Sormaz

К сожалению, я не могу использовать Process class и ServiceController вместе

CHill60

- Да, можешь. Смотрите пример моего обновленного решения

Ercan Sormaz

ManagementObject wmiService;
wmiService = новый объект управления("Win32_Service.Name='" + scTemp.ServiceName + "'");
объект o = wmiService.GetPropertyValue("ProcessId");

int processId = (int)((UInt32)o);
Процесс процесс = процесс.Как метод getprocessbyid(процесса);
список listbox1.Предметы.Добавить(процесс.VirtualMemorySize64.Метод toString());
}

я сделал это, чтобы рассчитать использование памяти для каждой службы, но я получаю ошибку.
System.NullReferenceException: 'ссылка на объект не установлена на экземпляр объекта'.

CHill60

На какой линии?

Ercan Sormaz

int processId = (int)((UInt32)o);
Эта линия.

CHill60

Поэтому, когда вы отлаживаете то, что находится в wmiService.GetPropertyValue("ProcessId")? Работает ли служба на данный момент? Это звучит очень похоже на то, что это может быть остановлено

Ercan Sormaz

Все еще бежит.