2012-05-09 51 views
1

我需要啓動IE並將親和力設置爲特定的單個CPU。 當運行下面的c#代碼時,正如預期的那樣notepad.exe被啓動並且它的親和性被設置爲僅僅cpu2,奇怪的是iexplore.exe的啓動將其親和性設置爲僅僅cpu0。無論我將ProcessorAffinity設置爲iexplore.exe總是轉到cpu0。IEXPLORE.exe奇怪ProcessorAffinity問題

我已經在4個核心xp 32位和4個核心2008 64位(都是IE8)上測試過這個。

using System; 
using System.Diagnostics; 
public class Launch 
{ 

    public static void Main(string[] args) 
    { 
     lauchWithAffinity("c:/windows/system32/notepad.exe"); 
     lauchWithAffinity("c:/Program Files/Internet Explorer/IEXPLORE.EXE"); 
    } 
    static void lauchWithAffinity(string exePath) 
    { 
     ProcessStartInfo start = new ProcessStartInfo(); 
     start.FileName = exePath; 
     Process myProcess =Process.Start(start); 
     myProcess.ProcessorAffinity = (System.IntPtr)4; //3rd cpu aka cpu2 
     //http://msdn.microsoft.com/en-us/library/system.diagnostics.process.processoraffinity.aspx 
    } 

} 
+0

我放了一個MessageBox.Show(myProcess.ProcessorAffinity.ToString());將親和度從15設置爲4後,msgbox打印4,你期望什麼不起作用? –

+0

您是否嘗試在'launchWithAffinity'方法周圍放置'try catch'來查看是否拋出異常? – Tudor

回答

0

我測試了你的程序,它對我來說工作正常。我甚至檢查了任務管理器,並將iexplore.exe的親和性設置爲CPU 2.

+0

當iexplore.exe在CPU 2上運行時,是否可以嘗試在CPU3上啓動第二個實例?它似乎總是出現在初始實例分配給的CPU上。 – user1385705

+0

@ user1385705:嗯,你好像是對的。我可以像這樣開始其他進程,並且它們可以正常工作,但iexplore似乎對下一個實例保持相同的親和力。我正在測試Windows 7 32位btw。 – Tudor

+0

@ user1385705:實際上,我寫了另一個測試,以兩個親和度啓動iexplore.exe,然後讀取系統中所有進程的親和性並正確顯示(iexplore的兩個實例爲4和8)。可能是任務管理器的錯誤? – Tudor