我正在尝试更改线程的优先级,但我无法让它工作。我做了一个按钮,可以在低和高之间切换优先级,当我在工作列表中检查它时,优先级会改变。但是 CPU 使用率没有改变。我想知道这是否只是因为我没有使用完整的 CPU 能力或者这是怎么回事。
我不是在问这是否是个好主意。我在问怎么做。
以下是我如何更改优先级。这是类背后的代码:
private Thread tr;
public MainWindow()
{
InitializeComponent();
tr = new Thread(new ThreadStart(infiniteLoop));
tr.Start();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (Process.GetCurrentProcess().PriorityClass == ProcessPriorityClass.High)
{
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle;
tr.Priority = ThreadPriority.Lowest;
description.Text = "Idle";
}
else
{
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
tr.Priority = ThreadPriority.Highest;
description.Text = "High";
}
}
private void infiniteLoop()
{
while (true)
{
}
}
最佳答案
它并不像我认为的那样工作 - 即低优先级的进程以某种方式被限制为 x% 的 CPU 时间。
具有任何优先级的单线程进程可以在一个内核上消耗 100% 的 CPU 时间。
当你有两个进程时,一个优先级比另一个高,它们自己都会消耗 100% 的 CPU 时间,同时执行,优先级高的进程将获得所有 CPU 时间(假设是单核)而优先级较低的则根本不会进步。
进程的优先级仅用于确定调度程序将 CPU 时间片“分发”给进程的顺序。
关于c# - 更改线程优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742682/