代码
C#
public static class CPUHelper{ public static CPUTime GetCPUTime() { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) return WindowsCPU.GetCPUTime(); return new CPUTime(); } 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 Math.Round(ret * 100, 2); }}public partial class WindowsCPU{#if NET7_0_OR_GREATER [LibraryImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static partial bool GetSystemTimes(out FILETIME lpIdleTime, out FILETIME lpKernelTime, out FILETIME lpUserTime);#else [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetSystemTimes(out FILETIME lpIdleTime, out FILETIME lpKernelTime, out FILETIME lpUserTime);#endif public static CPUTime GetCPUTime(FILETIME lpIdleTime, FILETIME lpKernelTime, FILETIME lpUserTime) { var IdleTime = ((ulong)lpIdleTime.DateTimeHigh << 32) | lpIdleTime.DateTimeLow; var KernelTime = ((ulong)lpKernelTime.DateTimeHigh << 32) | lpKernelTime.DateTimeLow; var UserTime = ((ulong)lpUserTime.DateTimeHigh << 32) | lpUserTime.DateTimeLow; var SystemTime = KernelTime + UserTime; return new CPUTime(IdleTime, SystemTime); } public static CPUTime GetCPUTime() { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { if (GetSystemTimes(out FILETIME lpIdleTime, out FILETIME lpKernelTime, out FILETIME lpUserTime) == false) { return default; } return GetCPUTime(lpIdleTime, lpKernelTime, lpUserTime); } return new CPUTime(); }}public struct CPUTime{ public CPUTime(ulong idleTime, ulong systemTime) { IdleTime = idleTime; SystemTime = systemTime; } public ulong IdleTime { get; private set; } public ulong SystemTime { get; private set; }}[StructLayout(LayoutKind.Sequential)]public struct FILETIME{ public uint DateTimeLow; public uint DateTimeHigh;}
支付宝微信扫一扫,打赏作者吧~
