[英]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.