如何使用空闲优先级启动.NET进程?

4

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

myProcess.PriorityClass = ProcessPriorityClass.Idle

改变进程的优先级为“空闲”,使其只在后台运行,并不会占用我的CPU功率。是否可以使用ProcessStartInfo对象指定该进程应以“空闲”优先级启动,以便在执行过程中任何时候都不会以高于空闲速度运行?

1
为什么启动后立即将其设置为闲置状态不起作用? - Sam Harwell
2个回答

7

在Process类中没有提供API以不同优先级启动进程的功能。最好的选择是在启动进程后立即设置它。一旦您启动了进程,可以设置Process.PriorityClass

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

如果您希望防止进程以更高的优先级运行,darin的回答提供了一种使用P/Invoke和Windows API的解决方法。即使这样启动进程也是普通优先级,但如果它在挂起状态下启动,它将不会运行,因此优先级将没有影响。


我已经在问题中说明了我正在做这件事。但是,我想在进程开始运行之前设置优先级。请仔细阅读问题。 - Kibbee
为什么要踩我?在ProcessStartInfo中无法设置优先级,但是你可以在创建的进程上设置优先级,这就是我所展示的内容... - Reed Copsey
你可以在创建进程后立即执行此操作,但不能在此之前。很抱歉,但这就是答案——没有其他选择。 - Reed Copsey
我明确表示我想在进程开始运行之前设置优先级,以便在任何时候进程都不会以高于空闲速度的速度运行。 - Kibbee
然后看看darin的答案 - 没有托管API可用,只能使用进程类。进程类没有提供实现它的方法。我会编辑我的答案以更具体地说明。 - Reed Copsey
你好@ReedCopsey。我个人认为你的答案很有用且高效。与P/Invoke相比,在效果方面两种答案都接近,但你的更容易实现。谢谢 - AFract

5

首先以挂起的状态启动进程,然后更改其优先级,最后恢复进程。您可以使用CreateProcess Win32函数并使用CREATE_SUSPENDED标志来完成此操作,但不幸的是我不确定.NET是否支持此功能,您可能需要使用P/Invoke


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接