为什么对PerformanceCounter的调用很慢?

时间:2014-02-24 14:11:30

标签: c# .net windows performance performancecounter

我正在使用从PerformanceCounters读取'%CPU'和'Available memory'的服务器。 它在我的开发机器上运行良好。但在实际的服务器上,从这两个PerformanceCounters中读取它真的很慢。至少在前两次阅读操作中 执行以下代码最多可能需要4-6分钟:

        Stopwatch watch = new Stopwatch();

        Log.Instance.Debug("Going to initialize Diagnostic's PerformanceCounters");

        watch.Start();

        m_CPUPerformanceCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
        m_MemoryPerformanceCounter = new PerformanceCounter("Memory", "Available MBytes", true);

        m_CPUPerformanceCounter.NextValue();
        m_MemoryPerformanceCounter.NextValue();

        //Ensure an updated value...
        System.Threading.Thread.Sleep(1000);

        m_CPUPerformanceCounter.NextValue();
        m_MemoryPerformanceCounter.NextValue();

        watch.Stop();

        Log.Instance.Debug("Finished initializing Diagnosticss PerformanceCounters. Time elapsed: {0}", watch.Elapsed);  

当我在开发机器上运行此代码时,它将在不到2秒(有时甚至更少)内完成。但是在我们产品的客户应该使用的实际服务器上,需要很长时间。见下文:

Finished initializing Diagnosticss PerformanceCounters. Time elapsed: 00:03:59.6706860

这些读取操作(以及后来的“读取”操作)执行速度非常快。即使在开始时。

我的开发机器是Windows 7,64位,8 GB RAM 客户端服务器是Windows Server 2008 R2 Enterprise,64位,4 GB RAM。

我用Google搜索(和Binged)它,但找不到任何答案。 为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:0)

问题很可能是由受监控系统上安装的其他软件提供的计数器。

在这种情况下,您应该对系统注册表中注册的所有性能计数器执行性能计数器初始化扫描,这可以使用ProcMon完成。