隐藏

在C#中的PerformanceCounter类的使用实例

发布:2022/12/17 14:28:10作者:管理员 来源:本站 浏览次数:554



一 PerformanceCounter 基本介绍

1 简单介绍

表示 Windows NT 性能计数器组件 

命名空间:System.Diagnostics

程序集:System(在 system.dll 中)

2 构造函数(只介绍本文要用到的)

PerformanceCounter (String, String, String) 

功能:

初始化 PerformanceCounter 类的新的只读实例,

并将其与本地计算机上指定的系统性能计数器或自定义性能计数器及类别实例关联

参数说明:

public PerformanceCounter (

 string categoryName,

 string counterName,

 string instanceName

)

categoryName

性能计数器关联的性能计数器类别(性能对象)的名称。 

counterName

性能计数器的名称。 

instanceName

性能计数器类别实例的名称,或者为空字符串 ("")(如果该类别包含单个实例)。

二 示例方法:

需要引用命名空间

using  System.Diagnostics;

using  System.Threading;

using  System.Collections;


1 获取性能计数器类别列表

虽然系统中有很多可用的计数器类别,但与之交互最频繁的可能是“Cache”(缓存)、“Memory”(内存)、

“Objects”(对象)、“PhysicalDisk”(物理磁盘)、“Process”(进程)、“Processor”(处理器)、

“Server”(服务器)、“System”(系统)和“Thread”(线程)等类别

        public   static   void  GetCategoryNameList()

        {

            PerformanceCounterCategory[] myCat2;

            myCat2  =  PerformanceCounterCategory.GetCategories();

            for  ( int  i  =   0 ; i  <  myCat2.Length; i ++ )

            {

                Console.WriteLine(myCat2[i].CategoryName.ToString());

            }

        }


2 获取性能计数器类别下的实例的名称实例下的性能计数器的名称

        public   static   void  GetInstanceNameListANDCounterNameList( string  CategoryName)

        {

            string [] instanceNames;

            ArrayList counters  =   new  ArrayList();

            PerformanceCounterCategory mycat  =   new  PerformanceCounterCategory(CategoryName);

            try

            {

                instanceNames  =  mycat.GetInstanceNames();

                if  (instanceNames.Length  ==   0 )

                {

                    counters.AddRange(mycat.GetCounters());

                }

                else

                {

                    for  ( int  i  =   0 ; i  <  instanceNames.Length; i ++ )

                    {

                        counters.AddRange(mycat.GetCounters(instanceNames[i]));

                    }

                }

                for  ( int  i  =   0 ; i  <  instanceNames.Length; i ++ )

                {

                    Console.WriteLine(instanceNames[i]);

                }

                Console.WriteLine( " ****************************** " );

                foreach  (PerformanceCounter counter  in  counters)

                {

                    Console.WriteLine(counter.CounterName);

                }

            }

            catch  (Exception)

            {

                Console.WriteLine( " Unable to list the counters for this category " );

            }

        }


3 根据categoryName,counterName,instanceName获得性能情况显示

        private   static   void  PerformanceCounterFun( string  CategoryName,  string  InstanceName,  string  CounterName)

        {

            PerformanceCounter pc  =   new  PerformanceCounter(CategoryName, CounterName, InstanceName);

            while  ( true )

            {

                Thread.Sleep( 1000 );  //  wait for 1 second 

                float  cpuLoad  =  pc.NextValue();

                Console.WriteLine( " CPU load =  "   +  cpuLoad  +   "  %. " );

            }

        }


4 调用方法3显示cpu使用率

PerformanceCounterFun( " Processor " ,  " _Total " ,  " % Processor Time " );