ThreadPriority.Lowest
和ThreadPriority.BelowNormal
之间有多大差异。
我如何知道选择哪一个?我有一些CPU密集型计算,我不希望它们影响应用程序的其余部分。
更新
正在从System.Threading.Timer
调用作业。我必须在回调方法返回之前重置线程优先级,还是.Net会处理它?</ p>
答案 0 :(得分:3)
基本思想是,优先事项才真正具有彼此的意义。在需要完成更高优先级的工作之前,优先级较低(有效)的工作将无法完成。这就是为什么将进程/线程的优先级提高得太高是非常危险的 - 你可以有效地锁定系统的其余部分。
另请注意,您的线程优先级会影响系统的其余部分 - 而不仅仅是应用程序的其余部分。但另请注意,操作系统本身可以随意调整线程的相对优先级(这就是我继续使用“有效”一词的原因)。
答案 1 :(得分:1)
根据优先级调度线程。用于确定线程执行顺序的调度算法因每个操作系统而异。当用户界面的焦点在前景和背景之间移动时,操作系统还可以动态调整线程优先级。
特定于您的问题:
最低可以在具有任何其他优先级的线程之后调度线程。
BelowNormal可以在具有普通优先级的线程之后和具有最低优先级的线程之前调度线程。
答案 2 :(得分:1)
The documentation似乎很清楚。如果希望在具有任何其他优先级的线程之后调度线程,请使用Lowest
。如果您希望在具有BelowNormal
优先级的线程之后以及具有Normal
优先级的线程之前调度线程,请使用Lowest
。
答案 3 :(得分:1)
请注意设置线程优先级。
虽然您不希望该过程影响应用程序的其余响应性,但通过降低线程优先级,它很可能意味着该线程需要更长的时间才能完成。这可能会对应用程序产生明显更严重的影响,因为用户更明显地等待它完成。
您应该测试在具有不同负载的不同计算机上更改优先级的效果。将优先级设置为最低将对线程的执行时间产生重大影响。
您可能还想考虑选择(可能在某种程度上隐藏),允许用户控制线程优先级(或至少选择2或3个中间值。
答案 4 :(得分:1)
选择哪一个取决于您的情况,但我这样看:
如果该过程完全是后台的,并且不是太关键,那么最低。
如果需要进行该过程,但时间不重要,低于正常值。
如果这个过程和其他一切一样重要,那就是正常。
我尽量不使用较高的那些,我的程序不是 重要的:)
至于差异,这取决于代码运行以及操作系统决定如何处理优先级,它不需要听你设置的代码。