首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#中的多线程CPU使用率

C# 中的多线程 CPU 使用率

在 C# 中,多线程 CPU 使用率可以通过不同的方式实现。一种实现方法是使用 Thread 类,并结合 Process.GetCurrentProcess().ProcessorCount 获取当前处理器核心数。以下是一个简单的多线程 CPU 使用率示例:

代码语言:csharp
复制
using System.Threading;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // 获取当前处理器核心数
        int cpuCount = Process.GetCurrentProcess().ProcessorCount;

        // 创建并启动线程
        Thread thread = new Thread(() =>
        {
            while (true)
            {
                // 计算 CPU 使用率
                double cpuUsage = GetCpuUsage(cpuCount);

                // 输出 CPU 使用率
                Console.WriteLine("CPU 使用率: " + cpuUsage.ToString("F2"));

                // 暂停 1000 毫秒(1 秒)后再次获取 CPU 使用率
                Thread.Sleep(1000);
            }
        });

        // 启动线程
        thread.Start();

        // 等待主线程结束
        Console.ReadLine();
    }

    // 计算 CPU 使用率
    private static double GetCpuUsage(int cpuCount)
    {
        double cpuUsage = 0;

        // 使用 GetLogicalProcessorInformationEx 函数获取 CPU 使用信息
        bool[] available = new bool[cpuCount];
        System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("System");
        System.Diagnostics.LogicalProcessorInformation[] logicalProcessors = new System.Diagnostics.LogicalProcessorInformation[cpuCount];
        foreach (System.Diagnostics.Process process in processes)
        {
            int numLogicalProcessors = process.Threads.Count;
            for (int i = 0; i < numLogicalProcessors; i++)
            {
                int id = process.Threads[i].Id;
                logicalProcessors[id] = GetLogicalProcessorInformationEx(process.Handle, LogicalProcessorInformationClass.ProcessorAffinity);
                if (logicalProcessors[id].Relationship == RelationshipType.NotRelated)
                {
                    available[id] = true;
                }
            }
        }

        // 计算 CPU 使用率
        for (int i = 0; i < cpuCount; i++)
        {
            if (available[i])
            {
                cpuUsage += logicalProcessors[i].ProcessorAffinity.Length;
            }
        }

        return cpuUsage / cpuCount;
    }
}

这个示例通过循环计算当前进程的 CPU 使用率。GetCpuUsage 函数通过使用 GetLogicalProcessorInformationEx 函数获取 CPU 逻辑处理器的相关信息,并计算出当前 CPU 的使用率。最后,将计算出的 CPU 使用率输出到控制台。

注意:在运行此示例之前,请确保您的系统支持多核心。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券