【问题标题】:Which is faster to get running processes WMI or System.Diagnostics.Process?让 WMI 或 System.Diagnostics.Process 运行进程哪个更快?
【发布时间】:2012-05-02 10:40:55
【问题描述】:

我正在使用 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

【问题讨论】:

  • 两者都试一下,测试一下各自的性能。

标签: c# process wmi


【解决方案1】:

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

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

【讨论】:

  • 我应该遵循某种方法在任何 PC 上运行相同的应用程序,还是应该通过更改每个副本的解决方案平台来拥有两个单独的版本?
  • 您只需要让您的应用程序以 AnyCPU 为目标。使用网络搜索了解更多信息。然后,您可以为两个平台提供一个应用程序。
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 2012-07-30
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
相关资源
最近更新 更多