c# - 使用Performance Monitor API 列出本机所有 Performance Counters

在Windows下, 使用Performance monitor取得性能信息(CPU, I/O, Memory, Process) 是首选. 

使用Performance monitor API 可以取得本机的Performance counters, 使用这些counters, 我们可以很方便的应用Performance counters在自己的代码中.

以下代码只是示例, 并未取得所有的Performance counters, 在实际情况中我们也不会这么做, 因为取得所有Counters要花费相当长时间. 在实际情况中, 我们会分别将Performance Counter Category, Instance, Performance Counters 做成不同的List 之后根据用户选择来决定。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApplicationPerfmon
{
    class Program
    {
        /*
         To get a performance counter, we need:
         1.Machine 
         2.Category 
         3.Instance 
         4.Counter 
         
         NOTE:There are performance counters that did not have any instance.So when retrieve counters we using these 2 methods:
            a.PerformanceCounterCategory.GetCounters();
            b.PerformanceCounterCategory.GetCounters(string instanceName);
         */
        static void Main(string[] args)
        {
            //MachineName
            string machineName = System.Environment.MachineName;
            
            //Get all categories
            PerformanceCounterCategory[] categories = PerformanceCounterCategory.GetCategories(machineName);
            
            //Sort categories by name
            IOrderedEnumerable orderedList = from category in categories
                                                                         orderby category.CategoryName
                                                                         select category;
            categories = orderedList.ToArray();
            
            
            if (categories != null && categories.Count() > 0)
            {
                //Get all instances
                string[] instanceNames = categories[0].GetInstanceNames();

                //If this category DOES contain instance, get counters
                if (instanceNames!=null && instanceNames.Count() > 0)
                {
                    PerformanceCounter[] counters = categories[0].GetCounters(instanceNames[0]);
                }

                //If this category DOES NOT contain any instance, get counters
                else
                {
                    PerformanceCounter[] counters = categories[0].GetCounters();
                }
            }
        }
    }
}


你可能感兴趣的:(C#,performance,api,c#,string,methods,null)