c# - 更改线程优先级

标签 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)
        {
        }
    }

最佳答案

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

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

当你有两个进程时,一个优先级比另一个高,它们自己都会消耗 100% 的 CPU 时间,同时执行,优先级高的进程将获得所有 CPU 时间(假设是单核)而优先级较低的则根本不会进步。

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

关于c# - 更改线程优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742682/

相关文章:

c# - IronPython 和 C# - 对 C# 对象的脚本访问

c# - ASP.net MVC - 自定义 HandleError Filter - 根据异常类型指定 View

c# - 多行 WPF 格式化文本中特定字符的坐标

c - 使用 OpenMP 进行数值积分近似

c# - C#中的换行问题

c# - lucene.net 语音过滤器

c# - 无法从父 View 模型WPF MVVM应用程序的弹出窗口中获取值

c# - WPF 中的多列、可编辑的 TreeView

c++ - 插入 int 集合时崩溃

spring - 阻止 Spring MVC Controller ?