gpt4 book ai didi

c# - 使用 C# 查找最少使用的 CPU 内核

转载 作者:太空狗 更新时间:2023-10-30 00:55:07 25 4
gpt4 key购买 nike

我正在编写一个小型 winforms 应用程序,它可以打开另一个程序的多个实例。为了优化性能,我正在寻找一种方法来找到使用最少的 CPU 内核来分配进程。

我还希望能够看到每个核心的使用百分比。没什么特别的,TextBox 或 Label 就可以了。

在遇到这些答案后,我一直在尝试使用 PerformanceCounter:

Finding core number

CPU usage for more than 2 cores

我尝试按如下方式实现这些:

        StatusBarOutput.Text = "";
//ignoring posible hyper-threading for simplicity's sake
var coreUsages = new PerformanceCounter[Environment.ProcessorCount];

for (var i = 0; i < coreUsages.Length; i++)
{
coreUsages[i] = new PerformanceCounter("Processor", "% Processor Time", i.ToString());

//using the status bar as output for now, doesn't really matter
StatusBarOutput.Text += " | " + coreUsages[i].CounterName + " ~ " + coreUsages[i].NextValue();
}

我得到的输出是:

output

与此同时,任务管理器显示:

output

不确定我在这里遗漏了什么。

最佳答案

操作系统可能更擅长确定使用哪个内核。 MS 的人们花了很多时间来优化这个特定方面。

如果你试图接管它,你会为每个新的服务包、操作系统版本、硬件风格等维护它吗?

您最好的选择可能是花一些时间优化流程,而不是试图猜透操作系统。

更新:

使用性能计数器,它并不像获取您找到的第一个值那么简单。您需要至少轮询两次(中间有一段时间)才能获得一个值。

这不一定是我在现实世界场景中实现它的方式,但我的想法是:

var coreUsages = new PerformanceCounter[Environment.ProcessorCount];

for (var i = 0; i < coreUsages.Length; i++)
{
coreUsages[i] = new PerformanceCounter("Processor", "% Processor Time", i.ToString());
coreUsages[i].NextValue();
}

Thread.Sleep(1000);

for (var i = 0; i < coreUsages.Length; i++)
{
//using the status bar as output for now, doesn't really matter
Trace.WriteLine(" | " + coreUsages[i].CounterName + " ~ " + coreUsages[i].NextValue());
}

关于c# - 使用 C# 查找最少使用的 CPU 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com