哪个运行进程WMI或System.Diagnostics.Process更快?

时间:2012-05-02 10:40:56

标签: c# process wmi

我正在使用WCF服务lib在LAN上开发一个小型远程任务管理器应用程序[server / client]。

我需要知道哪种方式更快获得处理器信息:

  • 从System.Diagnostics获取进程信息?
  • 从WMI获取流程信息?

我现在正在使用第一个选项,但是如果应用程序是x86,并且进程是x64,那么我无法访问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

1 个答案:

答案 0 :(得分:0)

我希望WMI会变慢。您可以使用一些技巧来加速WMI,但总的来说,性能通常很差。

在您的情况下,我只需构建针对AnyCPU的应用。然后你有一个应用程序,在32位操作系统下运行为x86,在64位操作系统下运行为x64。这样你就可以完全避开WMI。