簡體   English   中英

哪個更快地運行進程 WMI 或 System.Diagnostics.Process?

[英]Which is faster to get running processes WMI or System.Diagnostics.Process?

我正在使用 WCF 服務庫在 LAN 上開發一個小型遠程任務管理器應用程序 [服務器/客戶端]。

我需要知道哪種方式可以更快地獲取處理器信息:

  • System.Diagnostics獲取進程信息?
  • WMI獲取進程信息?

我現在使用第一個選項,但如果應用程序是 x86,進程是 x64,那么我無法訪問Process.MainModule ,所以它迫使我創建我的應用程序的兩個版本以使其在任何 PC 上運行、x86 版本和 x64。

那么如果我使用 WMI 會面臨同樣的問題嗎?

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


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

如果 WMI 更好,我需要一些屬性名稱的幫助:

  • Process.WorkingSet
  • Process.MainModule.FileVersionInfo.FileDescription

我希望 WMI 會更慢。 您可以使用一些技巧來加速 WMI,但總的來說,性能通常很差。

在您的情況下,我會簡單地構建針對 AnyCPU 的應用程序。 然后你有一個應用程序,它在 32 位操作系統下以 x86 運行,在 64 位操作系統下以 x64 運行。 這樣您就可以完全避免 WMI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM