ThreadPriority.Lowest
和ThreadPriority.BelowNormal
之间有多大的差异。
我该如何选择?我有一些需要大量CPU计算的任务,但我不想影响应用程序的其他部分。
更新
作业是从System.Threading.Timer
调用的。在回调方法返回之前,我必须重置线程优先级,还是.Net会处理它?
ThreadPriority.Lowest
和ThreadPriority.BelowNormal
之间有多大的差异。
我该如何选择?我有一些需要大量CPU计算的任务,但我不想影响应用程序的其他部分。
更新
作业是从System.Threading.Timer
调用的。在回调方法返回之前,我必须重置线程优先级,还是.Net会处理它?
你看过了吗?MSDN线程优先级。
线程的执行顺序是根据它们的优先级进行调度的。用于确定线程执行顺序的调度算法因操作系统而异。操作系统还可以根据用户界面的焦点在前台和后台之间移动来动态调整线程优先级。
针对你的问题:
最低 线程可以在任何其他优先级的线程之后被调度。
BelowNormal 线程可以在具有普通优先级的线程之后和具有最低优先级的线程之前被调度。
文档看起来很清晰。如果你想让线程在任何其他优先级的线程之后被调度,请使用Lowest
。如果你想让线程在Normal
优先级的线程之后和Lowest
优先级的线程之前被调度,请使用BelowNormal
。
设置线程优先级时要小心。
虽然您不希望进程影响应用程序的响应能力,但通过降低线程优先级,可能意味着线程完成所需的时间更长。这可能会对应用程序产生明显更严重的影响,因为用户更明显地在等待它完成。
您应该测试在不同负载的不同机器上改变优先级的效果。将优先级设置为最低将对线程的执行时间产生显著影响。
您还可以考虑提供一个选项(可能在某种程度上是隐藏的),允许用户控制线程优先级(或至少在2或3个中间值之间选择)。
选择哪一个取决于您的情况,但我是这样看待它的:
如果进程完全在后台运行并且不太关键,则选择最低。
如果进程需要发生,但时间不关键,则选择低于正常。
如果进程与其他所有内容一样重要,则选择正常。
我尽量不使用更高的优先级,我的程序并不那么重要 :)
至于差异,这取决于正在运行的代码以及操作系统决定如何处理优先级,它不需要听取您设置的优先级。