2012-05-02 69 views
1

我正在使用WCF服務庫在局域網上開發一個小型遠程任務管理器應用程序[服務器/客戶端]。運行進程WMI或System.Diagnostics.Process更快嗎?

我需要知道哪條路是更快獲得處理器的信息:

  • 正從System.Diagnostics程序過程中的信息?
  • 從WMI獲取進程信息?

我使用的第一選擇現在,但如果應用程序是86,而這個過程是64的話,我無法訪問Process.MainModule,所以它迫使我建立兩個版本我的應用程序得到它的適用於任何PC,x86版本和x64。
所以如果我使用WMI,我會面臨同樣的問題?

public void GetProcesses() 
    { 
     foreach (Process p in Process.GetProcesses()) 
     { 
      try 
      { 
       InfoPrcoess process = new InfoPrcoess(p.Id, p.MainModule.ModuleName, p.MainModule.FileVersionInfo.FileDescription, p.WorkingSet/1024); 
       PrintProcess(process); 
      } 
      catch 
      { } 
     } 
    } 


public class InfoPrcoess 
{ 
    public int Id; 
    public string Name; 
    public string Description; 
    public int WorkingSet; 
    public InfoPrcoess(int Id, string Name, string Desc, int WorkingSet) 
    { 
     this.Id = Id; 
     this.Name = Name; 
     this.Description = Desc; 
     this.WorkingSet = WorkingSet; 
    } 
} 

如果WMI是更好的,我需要的屬性名稱的一點幫助,讓我:Process.WorkingSetProcess.MainModule.FileVersionInfo.FileDescription

+3

只需嘗試兩個並測試每個的性能。 – Oded

回答

0

我希望WMI要慢一些。有一些技巧可以用來加速WMI,但總的來說,性能往往很差。

在你的情況下,我只是建立你的應用程序目標爲AnyCPU。然後,您將有一個應用程序在32位操作系統下以x86形式運行,在64位操作系統下以64位形式運行。這樣你可以完全避免WMI。

+0

有沒有什麼辦法可以在任何PC上運行相同的應用程序,還是應該通過更改每個副本的解決方案平臺來擁有兩個單獨的版本? –

+0

您只需將您的應用定位到AnyCPU即可。使用websearch瞭解更多信息。那麼你可以爲這兩個平臺都有一個應用程序。 –

相關問題