Ответ 1
Вы также можете использовать System.Diagnostics. Process.TotalProcessorTime и System.Diagnostics. ProcessThread.TotalProcessorTime, чтобы рассчитать использование вашего процессора в качестве статьи описывает.
Я работаю над фоновой программой, которая будет работать в течение длительного времени, и у меня есть внешняя программа ведения журнала (SmartInspect) что я хочу периодически передавать некоторые значения, чтобы отслеживать его в реальном времени при отладке.
Я знаю, что могу просто запустить несколько программ, таких как диспетчер задач или IARSN TaskInfo, но я хотел бы сохранить все в своей собственной программе для этого, так как я также хочу добавить некоторые простые правила, например, если программа использует больше, чем X% CPU, отметьте это в журнале.
У меня есть фоновый поток, который периодически передает некоторые статистические данные в SmartInspect, такие как потребление памяти, рабочий набор и т.д.
Возможно ли, чтобы этот поток получил достаточно точный показатель того, сколько ресурсов компьютера, которое он потребляет? Основная программа - однопоточное приложение (за исключением сторожевого потока, который регистрирует статистику), поэтому, если метод ограничивается тем, сколько использует один поток, это тоже хорошо.
Я нашел некоторые записи, связанные с чем-то вроде rusage для Linux и C. Есть ли что-то подобное, которое я могу использовать для этого?
Изменить: Хорошо, я попробовал счетчик производительности, но каждый раз добавлял много GC-данных, поэтому график использования памяти и сборки мусора взлетел вверх. Наверное, сейчас я оставлю эту часть.
Вы также можете использовать System.Diagnostics. Process.TotalProcessorTime и System.Diagnostics. ProcessThread.TotalProcessorTime, чтобы рассчитать использование вашего процессора в качестве статьи описывает.
Посмотрите System.Diagnostics.PerformanceCounter
. Если вы запустите perfmon.exe
, вы увидите диапазон доступных счетчиков производительности (установите "объект производительности" в "Процесс" ), один из которых - "% процессорного времени".
Вы можете использовать класс System.Diagnostic.PerformanceCounter. Вот пример того, как кто-то контролирует использование ЦП:
Обратите внимание, что для этого требуются повышенные привилегии. И, возможно, с его помощью может произойти удар производительности.
Хорошо, что вы регистрируетесь на мониторах, таких как smartinspect. Но сами окна собирают данные для каждого ресурса в этом случае вашу программу (или процесс). WMI является стандартом для мониторинга приложений. Мы можем просматривать данные, полученные WMI. Многие приложения, средства мониторинга работоспособности или инструменты мониторинга приложений поддерживают WMI из коробки.
Поэтому я бы не рекомендовал вам регистрировать использование вашего процессора в приложении в файле журнала.
Если вы считаете, что доступность и производительность критически важны, переходите к таким решениям, как решение Microsoft Operations Manager.
Чтобы получить представление о WMI и получить список процессов, см. ниже:
- Win32_PerfFormattedData_PerfProc_Process
, чтобы получить время Cpu, filter is processID
См. статью
- Вы можете получить идентификатор processID из класса Win32_process.
WMI Made Easy для С# Кевина Мэтью Госса
oConn.Username = "JohnDoe";
oConn.Password = "JohnsPass";
System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\MachineX", oConn);
//get Fixed disk stats
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3");
//Execute the query
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs,oQuery);
//Get the results
ManagementObjectCollection oReturnCollection = oSearcher.Get();
//loop through found drives and write out info
foreach( ManagementObject oReturn in oReturnCollection )
{
// Disk name
Console.WriteLine("Name : " + oReturn["Name"].ToString());
// Free Space in bytes
Console.WriteLine("FreeSpace: " + oReturn["FreeSpace"].ToString());
// Size in bytes
Console.WriteLine("Size: " + oReturn["Size"].ToString());
}
Вы также можете отслеживать процесс с удаленной системы.
В этой статье проекта кода описывается, как использовать высокопроизводительный таймер:
http://www.codeproject.com/KB/cs/highperformancetimercshar.aspx
Вы можете использовать его для выполнения кода.
Здесь вы можете найти несколько профилей С# с открытым исходным кодом: