×

# C# windows api 获取CPU使用率

hqy hqy 发表于2026-04-08 16:57:33 浏览10 评论0

抢沙发发表评论

# C# windows api 获取CPU使用率

代码

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;}


打赏

本文链接:https://www.kinber.cn/post/6413.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客