C# 更改线程优先级以使程序更具响应性

C# 更改线程优先级以使程序更具响应性,c#,visual-studio,multithreading,C#,Visual Studio,Multithreading,我已经编写了一个.NETWinForms应用程序,它进行了一些繁重的处理,并使我的计算机速度大大降低。我读过一些关于 Thread.CurrentThread.Priority 但是我真的不明白是应该给主线程更多的优先级,还是应该降低它的优先级,以消除计算机的“滞后”和减速 谢谢。这完全取决于您的应用程序和其他线程在做什么。您不应该真正提高UI线程优先级,但是可以降低任何后台线程优先级 为了保持UI的响应性,不要在该线程上执行任何繁重的处理—在后台线程上执行这些工作 也许有点模糊,但如果你的问

我已经编写了一个.NETWinForms应用程序,它进行了一些繁重的处理,并使我的计算机速度大大降低。我读过一些关于

Thread.CurrentThread.Priority
但是我真的不明白是应该给主线程更多的优先级,还是应该降低它的优先级,以消除计算机的“滞后”和减速


谢谢。

这完全取决于您的应用程序和其他线程在做什么。您不应该真正提高UI线程优先级,但是可以降低任何后台线程优先级

为了保持UI的响应性,不要在该线程上执行任何繁重的处理—在后台线程上执行这些工作


也许有点模糊,但如果你的问题是这样的话。如果可以的话,我也很乐意详细介绍。希望有帮助

如果您正在经历一般的“减速”和“滞后”,那么提高任何单个线程的优先级只会让事情变得更糟

这完全取决于你的应用程序是如何构造的,但如果你有一些繁重的处理过程,并且它占用了足够的处理器时间对系统的其余部分产生负面影响,那么你有两个主要选择:

  • 降低处理线程的优先级,以便系统其余部分的活动具有优先级
  • 在加工螺纹中引入人工断裂。通常,这是通过定期将线程发送到睡眠状态或让位于其他线程或事件循环来完成的

  • 您应该只增加系统中需要更高优先级的线程的优先级,而不仅仅是因为它们运行缓慢。优先级意味着你的线程应该被认为比其他线程更重要。在这种情况下,我认为情况并非如此

    如果降低优先级,则可能会发现它的运行速度较慢,因为其他任务可能会占用处理时间


    您需要做的是处理您的处理,可能添加线程(或更多的线程),或者考虑如何以其他方式改进处理。优先权不是答案。

    是的,它会解决你的问题。将其设置为ThreadPriority.BelowNormal(或Lowest),则计算机上其他进程启动的任何线程都将提前调度到工作线程。它显著地使您使用的任何程序都更具响应性。其结果是,当另一个进程正在消耗cpu时,您的工作线程可能会因cpu时间而耗尽。它仍然会偶尔运行,只是不是经常运行


    通常,避免启动的线程数超过cpu核心数。Environment.ProcessorCount。threadpool调度程序已经自动执行此操作,但不关注其他进程。

    我想我需要从主UI中删除该进程,并将其放在另一个线程中。这可能会解决问题,但我认为Thread.CurrentThread.Priority会解决这个问题。那么,这里还有另一个问题,即使所有代码都完成了,我如何创建一个线程并使其保持活动状态?因为进程不是直接完成的,但经过一段时间,我可以在线程中完成,但我不能死。怎么做?如果你刚刚开始使用线程/多线程(看起来你是),最好做一些研究——任何对你最有用的,可能是书籍、文章、教程等等。。。您可以将这些作为一个起点来阅读:为了避免让未来的读者感到困惑(因为OP的问题措辞含糊不清):设置为低优先级的“it”不应该是运行UI(消息循环)的主线程。在确认某个特定线程正在使UI变为“laggy”之后,并按照其他地方的建议确保线程在可能的情况下产生控制权,然后尝试降低该线程的优先级。