.NET Core 8 Точное получение процента использования ОЗУ и ЦП с помощью значений, отображаемых в диспетчере задач?C#

Место общения программистов C#
Ответить
Anonymous
 .NET Core 8 Точное получение процента использования ОЗУ и ЦП с помощью значений, отображаемых в диспетчере задач?

Сообщение Anonymous »

Мне нужно точно получить процент использования ЦП и ОЗУ в определенный момент времени с помощью WEB API .net core 8, используя цифры, показанные в диспетчере задач.

Проблема, с которой я столкнулся, заключается в том, что проценты значения, которое я получаю для процентов использования ЦП и ОЗУ, недостаточно точны, когда я сравниваю
их с процентными значениями Диспетчера задач.


Значения процента использования ОЗУ близки к точным значениям, отображаемым в диспетчере задач.
Код, который я использовал пробовал:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»