using System.Runtime.InteropServices;
namespace CZGL.SystemInfo
{
///
///
///
public static class CPUHelper
{
///
/// 获取当前系统消耗的 CPU 时间
///
///
public static CPUTime GetCPUTime()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
return WindowsCPU.GetCPUTime();
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
return LinuxCPU.GetCPUTime();
return new CPUTime();
}
///
/// 计算 CPU 使用率
///
///
///
///
public static double CalculateCPULoad(CPUTime oldTime, CPUTime newTime)
{
ulong totalTicksSinceLastTime = newTime.SystemTime - oldTime.SystemTime;
ulong idleTicksSinceLastTime = newTime.IdleTime - oldTime.IdleTime;
double ret = 1.0f - ((totalTicksSinceLastTime > 0) ? ((double)idleTicksSinceLastTime) / totalTicksSinceLastTime : 0);
return ret;
}
}
}