性能计数器对象

    我们在实际使用过程中,尤其是在服务类应用程序中会加入相关的系统监控模块,而系统监控的数据来源主要来源于性能计数器。

    计数器是用以收集性能数据的机制。注册表存储所有计数器的名称,每个计数器均与系统功能的一个特定区域相关。示例包括处理器繁忙时间、内存占用情况或通过某个网络连接接收的字节数。

    通过计数器的名称和位置可唯一地标识每个计数器。与文件路径包括驱动器、目录、一个或多个子目录和文件名一样,计数器信息由四个元素组成:计算机、对象、对象实例和计数器名称。

    计数器信息必须包括计数器为其测量数据的类别或性能对象。计算机的类别包括物理组件,如处理器、磁盘和内存。还有系统类别,如进程和线程。每个类别均与计算机内的一个功能元素相关,并且为每个类别均分配了一组标准计数器。这些对象列在 Windows 2000 系统监视器内“添加计数器”对话框的“性能对象”下拉列表中,在计数器路径中必须包括它们。性能数据按与其相关的类别进行分组。

    某些情况下可存在同一类别的多个副本。例如,几个进程和线程同时运行,并且有些计算机包含多个处理器。类别副本称为类别实例,而且每个实例都有分配给它的一组标准计数器。如果某个类别可有多个实例,则计数器信息中必须包括实例指定。

    我在这里班门弄斧一下,举个获取CPU使用率的例子.这个例子是通过C#写的。

    private PerformanceCounter _cpuperf = new PerformanceCounter("Processor", "User Time", "_Total", true);

    我们可以通过PerformanceCounter方便的创建一个性能计数器实例,橙色部分是传递给PerformanceCounter的参数(废话^ ^),那我就说说这些参数的含义:

    Processor  Performance Object中定义的处理器性能对象,传递这个参数告诉PerformanceCounter创建一个处理器性能计数器对象。

    UserTime 是计数器的名字,传递这个参数是告诉PerformanceCounter获取处理器的UserTime数据。

    _Total 是实例名,传递这个参数是告诉PerformanceCounter获取哪个处理器的数据,如果是多处理器,这里可以指定获取那个处理器实例上的UserTime数据,如果是_Total则获取所有处理器上的UserTime数据。

    不过这样我们还是不能获取数据,因为我们只是创建了性能计数器实例。我们需要通过下面的方法来获取数据:

    _cpuperf.NextValue 获取性能计数器的值,它返回的是一个float型值.这点需要注意的。

         这样我们就可以获取性能计数器的值了。

    PerformanceCounter 在 .NET Framework 1.0 版和 1.1 版中,此类要求直接调用方是完全信任的调用方。在 .NET Framework 1.1 以后的版本中,该类需要 PerformanceCounterPermission 以执行特定操作。强烈建议不要将 PerformanceCounterPermission 授予不完全受信任的代码。 读写性能计数器的能力允许代码执行某些操作,如枚举正在执行的进程并获取它们的信息。

    NextValue会产生以下异常,需要使用try对可能发生的异常进行处理,以保证程序的健壮性。

异常条件
InvalidOperationException

此实例未与性能计数器正确关联。

Win32Exception

访问系统 API 时出错。

PlatformNotSupportedException

平台为 Windows 98 或 Windows Me,这些平台不支持性能计数器。

UnauthorizedAccessException

以不具有管理特权的用户身份正在执行的代码尝试读取性能计数器。

    同的计数器等效于创建一个新的性能计数器,并且使用新属性进行的第一次读取操作返回 0.0。建议在调用 NextValue 方法后延迟一秒钟的时间再进行下一次调用,以允许计数器执行下一次增量读取。

    若要读取性能计数器,您必须具有管理特权。在 Windows Vista 中,用户帐户控制 (UAC) 确定用户的特权。如果您是内置的 Administrators 组的成员,将为您分配两个运行时访问标记:一个标准用户访问标记和一个管理员访问标记。默认情况下,您拥有标准用户角色。若要执行访问性能计数器的代码,首先必须将您的特权从标准用户提升至管理员。方法如下:在启动应用程序时右击此应用程序的图标,然后指示您希望以管理员身份运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值