我正在使用System.Diagnostics.ProcessStartInfo来设置从.NET程序启动进程的参数。一旦该过程开始,我可以使用
myProcess.PriorityClass = ProcessPriorityClass.Idle
要将进程的优先级更改为空闲,以便它只在后台运行,并且不会占用我的CPU电源。有没有办法使用ProcessStartInfo对象来指定进程应该以“空闲”优先级开始,以便在执行期间的任何时候进程都是以高于空闲速度运行的进程?
答案 0 :(得分:6)
Process类中没有提供API来启动具有不同优先级的进程。最好的选择是在启动过程后立即设置它。开始此过程后,您可以设置Process.PriorityClass:
var myProcess = Process.Start(...);
myProcess.PriorityClass = ProcessPriorityClass.Idle;
如果您希望阻止进程以更高的优先级运行,darin's answer提供了使用P / Invoke和Windows API的解决方法。即使这样也会以正常的优先级启动进程,但是如果它以挂起状态启动,它将不会运行,因此优先级将不起作用。
答案 1 :(得分:5)
暂停进程,然后更改优先级,然后恢复进程。您可以使用CreateProcess标志使用CREATE_SUSPENDED Win32函数执行此操作,但遗憾的是我不确定.NET中是否支持此操作,您可能需要使用P/Invoke。