Проблема, с которой я столкнулся, заключается в том, что проценты значения, которое я получаю для процентов использования ЦП и ОЗУ, недостаточно точны, когда я сравниваю
их с процентными значениями Диспетчера задач.
Значения процента использования ОЗУ близки к точным значениям, отображаемым в диспетчере задач.
Код, который я использовал пробовал:
Код: Выделить всё
public async Task getCpuUsageData()
{
try
{
var CpuThreadSleepTime = _appSettings.ThreadSleepTimeForCPU; // CpuThreadSleepTime - 30000
var RamThreadSleepTime = _appSettings.ThreadSleepTimeForRAM; // RamThreadSleepTime - 30000
var totalMemory = GetTotalPhysicalMemory();
var totalCpu = GetTotalCpu();
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
var availableMemory = ramCounter.NextValue();
var usedMemory = totalMemory - availableMemory;
var usedMemoryPercentage = (usedMemory / totalMemory) * 100;
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
cpuCounter.NextValue();
Thread.Sleep(CpuThreadSleepTime);
var cpuUsagePercentage = cpuCounter.NextValue();
var usedCpu = totalCpu - cpuUsagePercentage;
var usedCpuPercentage = (usedCpu / totalCpu) * 100;
Console.WriteLine("Used Ram Percentage : " + usedMemoryPercentage);
Console.WriteLine("Used CPU Percentage : " + usedCpuPercentage);
}
catch (Exception ex)
{
throw ex;
}
}
public float GetTotalPhysicalMemory()
{
try
{
float totalMemory = 0;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem");
foreach (ManagementObject mo in searcher.Get())
{
totalMemory = Convert.ToSingle(mo["TotalPhysicalMemory"]) / (1024 * 1024); // Convert bytes to MB
}
return totalMemory;
}
catch (Exception ex)
{
throw ex;
}
}
public float GetTotalCpu()
{
try
{
int totalCpu = 0;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT NumberOfLogicalProcessors FROM Win32_Processor");
foreach (ManagementObject mo in searcher.Get())
{
totalCpu += Convert.ToInt32(mo["NumberOfLogicalProcessors"]);
}
return (float)totalCpu;
}
catch (Exception ex)
{
throw ex;
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... manager-sh
Мобильная версия