【问题标题】:How do I start a .NET process with idle priority?如何启动具有空闲优先级的 .NET 进程?
【发布时间】:2010-11-25 09:06:15
【问题描述】:

我正在使用 System.Diagnostics.ProcessStartInfo 来设置从 .NET 程序启动进程的参数。一旦该过程开始,我可以使用

myProcess.PriorityClass = ProcessPriorityClass.Idle

将进程的优先级更改为空闲,以便它只在后台运行,并且不会占用我的 CPU 资源。有没有办法使用 ProcessStartInfo 对象来指定进程应该以“空闲”优先级启动,以便在执行期间任何时候进程都不会以高于空闲速度运行?

【问题讨论】:

  • 为什么启动不了,马上设置成idle?

标签: .net process scheduling


【解决方案1】:

Process 类中没有提供 API 来启动具有不同优先级的进程。最好的选择是在启动过程后立即设置它。一旦你开始这个过程,你可以设置Process.PriorityClass:

var myProcess = Process.Start(...);
myProcess.PriorityClass = ProcessPriorityClass.Idle;

如果您希望阻止进程以更高的优先级运行,darin's answer 提供了一种使用 P/Invoke 和 Windows API 的解决方法。即使这样以正常的优先级启动进程,但如果它以挂起状态启动,它将不会运行,因此优先级将无效。

【讨论】:

  • 我已经在问题中声明我正在这样做。但是,我想在进程开始运行之前设置优先级。请阅读问题。
  • 为什么投反对票?您无法在 ProcessStartInfo 中设置优先级,但您可以在您创建的进程上设置它,这就是我所展示的......
  • 您可以在创建流程后立即执行此操作,但不能在之前执行此操作。很抱歉,这就是答案 - 没有其他选择。
  • 我特别声明我想在进程开始运行之前设置优先级,这样进程在任何时候都不会以高于空闲速度运行。
  • 然后看看 darin 的回答 - 没有托管 API,使用进程类。流程类不提供执行此操作的方法。我将编辑我的答案以更具体。
【解决方案2】:

启动暂停的进程,然后更改优先级,然后恢复进程。您可以使用CreateProcess Win32 函数使用CREATE_SUSPENDED 标志执行此操作,但不幸的是,我不确定.NET 中是否对此提供支持,您可能需要求助于P/Invoke

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 2012-11-27
    • 2014-10-14
    • 2018-04-01
    • 1970-01-01
    • 2011-06-25
    • 2011-01-18
    相关资源
    最近更新 更多