当前位置:  开发笔记 > 编程语言 > 正文

以编程方式限制在服务内运行的线程的CPU使用率

如何解决《以编程方式限制在服务内运行的线程的CPU使用率》经验,为你挑选了1个好方法。

我正在使用VB9(VS2008).

我已经创建了一个定期为某些文件夹编制索引的Windows服务.

有没有办法可以根据当前系统状态对CPU使用率设置上限,即,如果系统处于空闲状态,则线程可以根据需要使用CPU,但是如果有其他程序/进程正在运行那么它应该以不会使系统变慢的方式使用CPU.



1> ShuggyCoUk..:

您可以通过Thread.Priority降低.Net中线程的优先级

将其设置为BelowNormal将意味着将在其前面安排其他线程.

这可能导致线程缺乏,但听起来这是一个可接受的设计决定,以满足您的需求.

请注意,由于您正在执行相当大的磁盘IO,这实际上将是后台任务的主要影响,您可能会发现降低优先级是不够的(因为即使在线程受到限制时,磁盘IO也会继续部分继续.

检查机器使用情况的监控线程(可选择仅在至少一个交互式用户存在时才关注)可以暂停索引(或显着限制IO).这对于有许多可用内核(和超线程虚拟内核)的现代机器来说更为重要,这意味着尽管用户实际上做了很多工作,但仍然存在备用资源来执行索引线程而不是真正执行磁盘IO.

您可能还想考虑是否检查电源方案以确定是否应该在那时运行(因为来自两个重磁盘访问的电池消耗都是不可忽视的)

如果你希望做更多的工作来减少这个后台IO绑定任务版本的Vista从Vista开始的影响,添加两个有用的API:

低优先级I/O.

这允许您的代码以比其他I/O更低的优先级调度I/O.

Windows任务计划程序

您可以使用它来安排在"系统空闲时间"运行的东西.这在系统不忙时,用户不在场.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有