.net - 如何提高进程的 I/O 优先级?

标签 .net file-io windows-vista

我想增加进程的 I/O 优先级。 .NET 和 Windows Vista 的答案都很好。 processexplorer 也可以。

最佳答案

与通常的 MS 文档相比,相关信息似乎有点分散。有此白皮书讨论 I/O Prioritization in windows .该文档似乎到处都是测试版标志,但我想它可能大部分都非常准确。

需要注意的两个重要事项:

  • 您只能将 IO 请求的优先级降低到低于正常值。
  • 驱动程序可以忽略任何此类请求并将其视为正常。

  • 客户端应用程序的有用 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/

    相关文章:

    .net - 在 Webkit .NET 中打开本地文件

    tomcat - 如何在不将文件放入 Tomcat/bin 文件夹的情况下读取 Web 应用程序中的文件

    c++ - 在 C++ 中通过套接字发送图像

    delphi - 如何使用 Delphi 在控制台应用程序中激活玻璃效果(Windows Vista/7)

    asp.net - 如何清除 Windows Vista 上的 Visual Studio 缓存?

    c# - .NET(或 MFC)的高速绘图控件?

    c# - 确保C#程序可以在只有.Net v2的机器上运行

    java - 如何在 fedora 上使用 netbeans 7.2 从 java 项目中的文件读取输入?

    c++ - 在 Vista 上调用 RPC 调用时为 "operation is not supported"

    .net - WPF 中的 StackPanel 与 DataGrid 与 DockPanel