1

WCF サービス ライブラリを使用して、LAN 上で小さなリモート タスク マネージャー アプリケーション [サーバー/クライアント] を開発しています。

プロセッサ情報を取得するには、どちらの方法が速いかを知る必要があります。

  • からプロセス情報を取得しますSystem.Diagnosticsか?
  • からプロセス情報を取得しますWMIか?

現在、最初のオプションを使用していますが、アプリケーションが x86 でプロセスが x64 の場合、にアクセスできませんProcess.MainModule。そのため、アプリケーションの 2 つのバージョンを作成して、どの 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 ビット OS では x86 として、64 ビット OS では x64 として実行される単一のアプリがあります。そうすれば、WMI を完全に回避できます。

于 2012-05-02T11:02:55.900 に答える