我正在使用VB9(VS2008).
我已经创建了一个定期为某些文件夹编制索引的Windows服务.
有没有办法可以根据当前系统状态对CPU使用率设置上限,即,如果系统处于空闲状态,则线程可以根据需要使用CPU,但是如果有其他程序/进程正在运行那么它应该以不会使系统变慢的方式使用CPU.
您可以通过Thread.Priority降低.Net中线程的优先级
将其设置为BelowNormal将意味着将在其前面安排其他线程.
这可能导致线程缺乏,但听起来这是一个可接受的设计决定,以满足您的需求.
请注意,由于您正在执行相当大的磁盘IO,这实际上将是后台任务的主要影响,您可能会发现降低优先级是不够的(因为即使在线程受到限制时,磁盘IO也会继续部分继续.
检查机器使用情况的监控线程(可选择仅在至少一个交互式用户存在时才关注)可以暂停索引(或显着限制IO).这对于有许多可用内核(和超线程虚拟内核)的现代机器来说更为重要,这意味着尽管用户实际上做了很多工作,但仍然存在备用资源来执行索引线程而不是真正执行磁盘IO.
您可能还想考虑是否检查电源方案以确定是否应该在那时运行(因为来自两个重磁盘访问的电池消耗都是不可忽视的)
如果你希望做更多的工作来减少这个后台IO绑定任务版本的Vista从Vista开始的影响,添加两个有用的API:
这允许您的代码以比其他I/O更低的优先级调度I/O.
您可以使用它来安排在"系统空闲时间"运行的东西.这在系统不忙时,用户不在场.