Использование PerformanceCounter для отслеживания использования памяти и ЦП для каждого процесса?

Я знаю, что jnc указывает, что мы выйдем из этого цикла, когда не будет переполнения переноса, т.е. CF = 0.

Это не правильно. JNC будет прыгать, если CF = 0, что означает, что он будет прыгать, если нет беззнакового переполнения .

Поскольку si должен указывать на индекс первого элемента списка, не будет ли это 80h? И затем, если si увеличивается, оно должно указывать на 70h. После их сложения ответ должен быть F0, верно?

Пока да.

Однако, когда я запускаю кусок кода, я получаю значение AL равным 50. Как это возможно?
Чего мне не хватает?

Возвращаемое значение 50h равно

80h + 70h + 60h = 50h + CARRY flag (unsigned overflow).

Пошагово это

80h + 70h = F0h    (CF = 0 = JUMP)
F0h + 60h = 50h    (CF = 1 = NO JUMP = EXIT LOOP)

Таким образом, последнее добавление устанавливает флаг CARRY в 1 из-за переполнения без знака с FFh до 00h (F0h + 0Fh до F0h + 10h (и, наконец, 60h - 10h = 50h)). Поскольку флаг CARRY установлен, условный переход JNC проходит, и AL содержит значение «переполнения», равное 50h.

28
задан Brad Rem 21 August 2012 в 14:21
поделиться

2 ответа

Для данных о каждом процессе:

Process p = /*get the desired process here*/;
PerformanceCounter ramCounter = new PerformanceCounter("Process", "Working Set", p.ProcessName);
PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", p.ProcessName);
while (true)
{
    Thread.Sleep(500);
    double ram = ramCounter.NextValue();
    double cpu = cpuCounter.NextValue();
    Console.WriteLine("RAM: "+(ram/1024/1024)+" MB; CPU: "+(cpu)+" %");
}

Счетчик производительности также имеет другие счетчики, кроме Working set и Processor time.

50
ответ дан 28 November 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: