2014-07-03 30 views
0

我想用PerformanceCounter来检索Windows上的一些性能细节。我使用了PerformanceCounterCategory.GetCategories方法,并从链接中运行示例代码,该链接提供了运行的计算机上可用的所有类别名称。找出有关PerformanceCounter的信息

我从BlackWasp.co.uk运行代码,演示了如何在示例代码中使用PerformanceCounter。

我缺少的是constructor需要至少两个字符串作为参数counterCategory和counterName。我可以从PerformanceCounterCategory.GetCategories中获得计数器类别,但是如何设置名称?

我明白了,我应该使用PerformanceCounterCategory.Create(...)来设置名称,但是如何将它与我想要监视的指定行为(如磁盘读取等)联系起来呢?

的示例代码:

Console.WriteLine("Creating Inventory custom counter"); 
if (!PerformanceCounterCategory.Exists("Inventory")) 
    PerformanceCounterCategory.Create("Inventory", 
     "Truck inventory", 
     PerformanceCounterCategoryType.SingleInstance, 
     "Trucks", "Number of trucks on hand"); 

这种让我在黑暗中,我不知道在哪里“卡车库存”或“卡车”从何而来。

任何人都可以指向正确的方向吗?有没有更好的方法来进行性能监控?

那么如何创建一个性能计数器并将其与有意义的硬件性能联系起来呢?

+0

http://social.msdn.microsoft.com/Forums/en-US/37b8b63a-da32-4497-b570-3811a2255dee/how-to-得到-磁盘IO-countersdisk写时间磁盘读出时间 - 使用 - CNET?论坛= csharplanguage – Andreas

+0

性能计数器必须先注册。并且需要有*某种类型的应用程序来设定它们的价值。只有这样你才能期望能够阅读这样的计数器。你的问题并没有暗示你照顾到了这些初步步骤。 –

回答

0

我发现我正在寻找here(解释如下)和here如果您想以编程方式执行此操作。

从本质上讲,如果你需要找出哪些性能计数器,您可以访问去 -

开始 - >搜索框 - >性能监视器

点击PERFMON.EXE。这会给你一个窗口。点击

监视工具 - >性能监视器

这会给你的图表。在图上单击鼠标右键,然后单击添加计数器

这给出了所有可能的计数器类别的列表。点击类别列表左侧的箭头,将出现所有可能的名称和实例列表。

这涵盖的PerformanceCounter的两个主要的构造函数:

PerformanceCounter(string counterCategory, string counterName) 
PerformanceCounter(string counterCategory, string counterName, string counterInstance) 

另外,如果你是一个总的新手到这个话题,好像我是,你要知道这已经被捆绑到它可能是有用的定时器(一般来说),因为它需要从最后一个时间间隔进行测量。

这里是一个裸露的骨头控制台应用程序:

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Threading; 

namespace Performance 
{ 
    class PerformanceTest 
    { 
     PerformanceCounter memory; 

     Timer timer; 

     public PerformanceTest() 
     { 
      memory = new PerformanceCounter("Memory", "Available MBytes"); 
      // Get a new value every 10 seconds 
      timer = new Timer(PerformanceTimer_Tick, null, 0, 10000); 
     } 

     static void Main(string[] args) 
     { 

      PerformanceTest pt = new PerformanceTest(); 

      Console.ReadLine(); 
     } 

     private void PerformanceTimer_Tick(object sender) 
     { 
      Console.WriteLine("Memory Available: " + memory.NextValue().ToString() + "\n"); 
      // Force garbage collection 
      GC.Collect(); 
     } 
    } 
}