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

您正在执行与性能计数器不同的计算。您正在做的是每秒获取页面数,持续 50 秒,然后获取这 50 个数字的平均值。一,很明显,性能计数器处理数据的时间更长。第二,这不是一个有用的平均值。性能计数器有效地采用了更高的样本。例如,如果每秒页面数值在 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 回答