更改线程优先级

7he*_*ing 3 c# wpf multithreading thread-priority

我正在尝试更改线程的优先级,但无法使其工作。我制作了一个按钮,可以在低和高之间切换优先级,当我在作业列表中检查此按钮时,优先级会发生变化。但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)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

tom*_*ing 5

它并不像我想象的那样工作 - 即低优先级的进程会以某种方式限制为 x% CPU 时间。

具有任何优先级的单线程进程都可能消耗一个内核上 100% 的 CPU 时间。

当您有两个进程,其中一个进程的优先级高于另一个进程时,它们都会自行消耗 100% CPU 时间,同时执行,优先级较高的进程将获得所有 CPU 时间(假设是单核),而优先级较高的进程将获得所有 CPU 时间(假设是单核)优先级较低的项目根本不会取得进展。

进程的优先级仅用于确定调度程序向进程“分发”CPU 时间片的顺序。