2

パフォーマンス モニターのように、パフォーマンスに関するデータを収集するプロジェクトに取り組んでいます。

ただし、ページ/秒でモニターを実行すると、パフォーマンス モニターとは異なる結果が得られます。パフォーマンス カウンターがすべての小数点以下を表示せず、平均計算が不正確になるためだと考えています。

私のコードが更新されました:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Net;
using System.Management;
using System.Net.NetworkInformation;

namespace PerformanceMonitor
{
    class Program
    {

        static void Main(string[] args)
        {
       List<float> pagesSec = new List<float>();
        PerformanceCounter memoryPages = new PerformanceCounter("Memory", "Pages/sec");

        while (count < 50)
        {
            pagesSecValue = memoryPages.NextValue();
            pagesSec.Add(pagesSecValue);


           Console.WriteLine("Pages: " + pagesSecValue);
           count++;

            Thread.Sleep(1000);
            Console.Clear();
        }

Console.WriteLine("Avg pages/sec: " + pagesSec.Average());

 Console.ReadLine();
        }
}
}

プログラムの実行中、ほとんどの場合、コンソールに 0 が表示されます。

結果: 私のプログラム: 4,06349 Windows パフォーマンス モニター: 12,133

違いはなぜですか?

4

1 に答える 1

2

パフォーマンスカウンターとは異なる計算を行っています。あなたがしているのは、1秒あたりのページ数を1秒に1回、50秒間取得し、それらの50個の数値の平均を取得することです。1つは、明らかにパフォーマンスカウンターが長期間データを処理していることです。2つ目は、これは有用な平均ではありません。パフォーマンスカウンターは、はるかに高いサンプルを効果的に取得しています。たとえば、1秒あたりのページ数の値が2秒間にわたってこれを行った場合、どうなると思いますか。0 .5 1 1.5 2 5 15 6 20 4

そして、あなたのコードは0、1、2秒でサンプリングされましたか?「平均」は5になり、パフォーマンスカウンター(0.5秒でサンプリングした場合はそうではありません)は10になります。

于 2012-09-04T13:45:36.700 に答える