2011-03-09 22 views
-1

我在进程优先级(Win Server 2003 Standard,8 Core,16GB RAM)方面存在一个小问题。我VB.NET 2005程序启动的过程是这样的:尽管CPU负载很高,低优先级进程并不空闲

Dim WithEvents proc As New Process 

Sub Main() 
    proc.StartInfo.FileName = "blastx.exe" 
    proc.Start() 
    proc.PriorityClass = ProcessPriorityClass.Idle 
End Sub 

在这种情况下,4芯blastx.exe运行。

我希望,我的启动进程空闲时,具有0%的CPU使用率在系统满负荷情况下(我模拟这个与Prime95的,8个工作线程),且仅当有免费的资源运行。但它产生25%的cpu负载,prime95只有75%,而不是预期的0%/ 100%。在任务管理器中,我可以看到我的进程具有最低优先级,Prime95具有正常优先级。

我对空闲或整个优先级系统有错误的理解吗?它可能是一种“多核问题”吗?

我有同样的问题,“ProcessPriorityClass.BelowNormal”

回答

-1

的原因是,该进程已启动,并开始设置优先级之前执行的,那时它已经开始利用CPU资源作为普通优先级处理。

解决方案是在挂起模式下创建进程,设置优先级并恢复它。你将不得不为此使用PInvoke。看到这个职位的详细信息:How do I start a .NET process with idle priority?

,这里是如何的PInvoke CreateProcess的 http://www.pinvoke.net/default.aspx/coredll/CreateProcess.html

+0

这是否意味着,在启动过程中,不具有任何效果后更改优先级? – Sagi 2011-03-09 12:34:09

+0

是你可以,但通过时间的变化和采取影响一些实质性的处理通常已执行 – 2011-03-09 13:52:21

+0

但我的过程(blastx.exe)通常需要一些** **分钟才能完成。而到了这个时候,虽然它具有低优先级,但它占用了CPU资源。 – Sagi 2011-03-09 14:01:02

相关问题