Dot-Net
如何提高程序的 I/O 優先級?
我想增加程序的 I/O 優先級。.NET 和 Windows Vista 的答案都很好。processexplorer 也可以。
與通常的 MS 文件相比,相關資訊似乎有點分散。有這篇白皮書討論了 windows 中的 I/O 優先級。這個文件似乎到處都是 beta 標誌,但我想它可能非常準確。
需要注意的兩個重要事項:
- 您只能將 IO 請求的優先級降低到正常以下。
- 驅動程序可以忽略任何此類請求並將其視為正常。
對客戶端應用程序有用的 API 是SetFileInformationByHandle:
FILE_IO_PRIORITY_HINT_INFO priorityHint; priorityHint.PriorityHint = IoPriorityHintLow; result = SetFileInformationByHandle( hFile, FileIoPriorityHintInfo, &priorityHint, sizeof(PriorityHint));// 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);// reduce CPU, page and IO priority for the current thread SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN); // do stuff SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END);// reserve bandwidth of 200 bytes/sec result = SetFileBandwidthReservation( hFile, 1000, 200, FALSE, &transferSize, &outstandingRequests );對於 .Net,使用 P/Invoke 做通常的事情。