我想增加进程的 I/O 优先级。 .NET 和 Windows Vista 的答案都很好。 processexplorer 也可以。
最佳答案
与通常的 MS 文档相比,相关信息似乎有点分散。有此白皮书讨论 I/O Prioritization in windows .该文档似乎到处都是测试版标志,但我想它可能大部分都非常准确。
需要注意的两个重要事项:
客户端应用程序的有用 API 是 SetFileInformationByHandle :
FILE_IO_PRIORITY_HINT_INFO priorityHint;
priorityHint.PriorityHint = IoPriorityHintLow;
result = SetFileInformationByHandle( hFile,
FileIoPriorityHintInfo,
&priorityHint,
sizeof(PriorityHint));
SetPriorityClass :
// reduce CPU, page and IO priority for the whole process
result = SetPriorityClass( GetCurrentProcess(),
PROCESS_MODE_BACKGROUND_BEGIN);
// do stuff
result = SetPriorityClass( GetCurrentProcess(),
PROCESS_MODE_BACKGROUND_END);
SetThreadPriority这是相似的:
// reduce CPU, page and IO priority for the current thread
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
// do stuff
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END);
SetFileBandwithReservation :
// reserve bandwidth of 200 bytes/sec
result = SetFileBandwidthReservation( hFile,
1000,
200,
FALSE,
&transferSize,
&outstandingRequests );
对于 .Net,用 P/Invoke 做通常的事情。
关于.net - 如何提高进程的 I/O 优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301290/