更改Thread.Priority以使程序更具响应性

时间:2011-07-31 15:45:31

标签: c# visual-studio multithreading

我已经编写了一个.net winforms应用程序,它可以执行一些繁重的处理并使我的计算机速度慢下来。我读过一些关于

的内容
Thread.CurrentThread.Priority

但我真的不明白我是否应该给予主线程更优先权或降低其优先级以消除“滞后”和我的计算机速度减慢。

谢谢。

4 个答案:

答案 0 :(得分:5)

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

为了保持UI响应,不要对该线程进行任何繁重的处理 - 在后台线程上完成工作。

或许有点模糊,但如果你的问题那么。如果你能的话,很高兴能够详细介绍。希望有所帮助!

答案 1 :(得分:1)

是的,它会解决您的问题。将其设置为ThreadPriority.BelowNormal(或最低),并且计算机上其他进程启动的任何线程将在工作线程之前进行调度。它显着地保持您使用的任何程序交互式响应更快。结果是当另一个进程正在烧录cpu时,你的工作线程可能因为cpu时间而变得饥饿。它仍会偶尔运行,而不是经常运行。

通常,避免启动比拥有cpu内核更多的线程。 Environment.ProcessorCount。线程池调度程序已经自动执行此操作,但不关注其他进程。

答案 2 :(得分:0)

如果你遇到一般的“放慢”和“滞后”,那么提高任何一个线程的优先级只会让事情变得更糟。

这完全取决于您的应用程序的结构,但如果您正在进行一些繁重的处理并且使用足够的处理器时间对系统的其余部分产生负面影响,那么您有两个主要选项:

  1. 降低处理线程的优先级,以便系统其余部分的活动优先。
  2. 在处理线程中引入人工中断。通常,这是通过定期将线程发送到休眠状态或让其他线程或事件循环产生来完成的。

答案 3 :(得分:0)

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

如果降低优先级,那么您可能会发现它似乎运行速度较慢,因为其他任务可能需要处理时间。

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