C# 中的多线程 CPU 使用率
在 C# 中,多线程 CPU 使用率可以通过不同的方式实现。一种实现方法是使用 Thread
类,并结合 Process.GetCurrentProcess().ProcessorCount
获取当前处理器核心数。以下是一个简单的多线程 CPU 使用率示例:
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 使用率输出到控制台。
注意:在运行此示例之前,请确保您的系统支持多核心。
领取专属 10元无门槛券
手把手带您无忧上云