Я пытаюсь внедрить инструмент мониторинга производительности, я хочу контролировать основные вещи, такие как память и ЦП.
Я пытаюсь сделать это с помощью счетчиков производительности, поскольку считаю, что это то, что Диспетчер задач также использует за кулисами. Я понятия не имею, как диспетчер задач может это сделать, однако мне кажется, что для получения данных процесса с использованием этого метода требуется ОЧЕНЬ много времени:
class Program
{
static void Main(string[] args)
{
while (true)
{
var pcs = Process.GetProcesses()
.Select(p => new PerformanceCounter("Process", "Working Set - Private", p.ProcessName));
var sw = Stopwatch.StartNew();
foreach (var pc in pcs)
pc.NextValue();
Console.WriteLine($"Time taken to read {pcs.Count()} performance counters: {sw.ElapsedMilliseconds}ms");
Thread.Sleep(1000);
}
}
}
Кто-нибудь получил какие-либо предложения о том, как это сделать или как даже диспетчер задач или Process Explorer может это сделать?
PerformanceCounter
внутри цикла обновления. Уберите его и добавьте.ToList()
в конце, и держу пари, вы увидите намного меньше времени. - person Scott Chamberlain   schedule 04.12.2016ZwQuerySystemInformation
для этой задачи - person RbMm   schedule 04.12.2016Process
экземпляр, но, например. Данные процессора имеют неверный формат. - person WerWet   schedule 14.04.2017