如何在Win7中更改进程或线程的I/O优先级?

Rom*_*nSt 33 windows-7 performance priority process io

Process Explorer 能够显示给定线程的有效 IO 优先级,但不能更改它。由于 IO 优先级支持是一个相对较新的特性,大多数程序不会设置自己的 IO 优先级。似乎默认情况下 IO 优先级是从线程优先级(而不是进程优先级)派生的,Process Explorer 也无法修改。

是否有其他工具可以帮助我更改给定线程/给定进程的所有线程的 IO 优先级?

小智 24

我在看到没人打扰之后开发了这个:https : //sourceforge.net/projects/iopriority/(开源)

该程序能够设置进程的 I/O 优先级,所有线程都会立即受到它的影响。修改它以使用线程而不是进程非常容易。


Rom*_*nSt 14

ProcessHacker是一个 GUI 工具,可以更改任意进程的 IO 优先级。


dya*_*sta 12

现成的工具

通过手动用户操作自动化和持久性设置进程 I/O 优先级的第三方工具将是Process Lasso。它几乎可以设置任何进程设置,并且可以持久地或按规则进行(例如,当发生这种情况时,更改其 I/O 优先级)。

程序化答案

答案是对 NT Native API NTSetInformationProcess的简单 API 调用。它在 2008 DDK 中被定义为“IoPriority”类。在 NT6 中只支持两个级别:非常低(背景)和正常。技术上定义了 5 个级别——严重、高、正常、低和非常低。临界级别是为分页操作保留的。其他的没有数据。

但是,使用 I/O 优先级的正确方法只是通过调用 Windows API SetProcessPriorityClass来启动“后台模式” ,提供 PROCESS_MODE_BACKGROUND_BEGIN。这将导致它使用非常低(后台)I/O 优先级以及空闲 CPU 优先级类。完成后,通过 PROCESS_MODE_BACKGROUND_END 恢复。

SetThreadPriority函数API也将允许特定的线程此相同的背景模式。在这里,您需要提供 THREAD_MODE_BACKGROUND_BEGIN/END。