1

私はこの問題に固執しました:特定のアプリケーションを使用するプロセッサの割合を計算したいのですが、この場合は 29 個のクロムのインスタンス化が特徴です。プロセッサがクロムのインスタンス化を合計 29 回消費する方法に興味があります。試したコードは次のとおりです。

private float GetCpuUsage(string ProcessName)
    {
        float cpuUsage = 0;
        try
        {
            var ProcName = Process.GetProcessesByName(ProcessName);
            var instances = new PerformanceCounter[ProcName.Length];
            for (int i = 0; i < instances.Length; i++)
            { 

                using (var TotalCpuUsage = new PerformanceCounter("Process", "% Processor Time", ProcName[i].ProcessName, true))
                {

                    TotalCpuUsage.NextValue();
                    Thread.Sleep(1000); //for better aproximation cpu
                    double processNext = Math.Round((double)(TotalCpuUsage.NextValue() / Environment.ProcessorCount), 2);
                    Console.WriteLine("Processor Cpu:{0}, PidProcess:{1}", processNext, ProcName[i].Id);
                    cpuUsage += (float)processNext;


                }
            }
            Console.WriteLine("Processor TotalCpu:{0}", cpuUsage);
            return cpuUsage;
        }
        catch (Exception ex)
        {
           Message.Show(ex.Message + "\r\n" + ex.StackTrace);
            return cpuUsage;
        }
    }

そして、私はこれらの奇妙な結果を持っています:

Processor Cpu:6.51, PidProcess:18496
Processor Cpu:3.55, PidProcess:22056
Processor Cpu:20.54, PidProcess:16920
Processor Cpu:0, PidProcess:19420
Processor Cpu:0, PidProcess:7644
Processor Cpu:0, PidProcess:22500
Processor Cpu:14.07, PidProcess:19644
Processor Cpu:0, PidProcess:22004
Processor Cpu:3.55, PidProcess:23772
Processor Cpu:0, PidProcess:7948
Processor Cpu:6.91, PidProcess:22980
Processor Cpu:14.19, PidProcess:19464
Processor Cpu:0, PidProcess:18428
Processor Cpu:16, PidProcess:19408
Processor Cpu:0, PidProcess:20340
Processor Cpu:20.73, PidProcess:16660
Processor Cpu:9.37, PidProcess:7784
Processor Cpu:7.16, PidProcess:23984
Processor Cpu:0, PidProcess:8156
Processor Cpu:17.91, PidProcess:13272
Processor Cpu:10.1, PidProcess:20228
Processor Cpu:13.35, PidProcess:6568
Processor Cpu:3.55, PidProcess:6452
Processor Cpu:0, PidProcess:11668
Processor Cpu:0, PidProcess:16780
Processor Cpu:7.23, PidProcess:7036
Processor Cpu:0, PidProcess:19712
Processor Cpu:13.7, PidProcess:20316
Processor Cpu:3.45, PidProcess:20296

Processor TotalCpu:191.87

この問題にどのように取り組むことができますか?? 実際の結果を得るために何をすべきか

4

2 に答える 2

0

これは少し古い質問であることは承知していますが、このアプローチには根本的な欠陥があることを付け加えたいと思います。

CPU 使用率は、タイム スライスを使用して計算されます。上記のコードの場合、1 秒間にわたって計算されます (たとえば、タスク マネージャーが使用するのと同じなので、問題はありません)。

ただし、PerformanceCounterプロセスごとにインスタンスを作成しており、一度に 1 つのインスタンスしか使用していません。

これが実際に意味することは... (chrome)00:00 (mm:ss) と 00:01 でプロセスをクエリ(chrome#1)し、次に 00:01 と 00:02 でクエリを実行し、00:02(chrome#2)で再度クエリを実行します。 00:03 ...など

したがって、クエリを実行したときに(chrome)100% の CPU を使用していた可能性は十分にありますが、1 秒後にクエリを実行(chrome#1)すると、前者は現在 0% の CPU を使用しており、後者は現在 100% を使用しているため、それらを合計すると 200% になります。 CPU使用率。

正確な表現を得るには、すべてのプロセスを同時にクエリする必要があります。

于 2016-11-02T09:28:21.657 に答える