1

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

1 回答 1

0

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

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

于 2012-05-02T11:02:55.900 回答