监控应用程序的性能的一个很好的办法就是使用Performance Counter。Windows提供了系统工具来显示PerformanceCounter收集的数据,在运行对话框中输入perfmon,就可以调出该工具来显示PerformanceCounter收集的数据。如果在工具中添加一个Performance Counter,就会发现,每一个Performance Counter都会属于一个目录,以便于组织Performance Counter。每一个目录下都有许多个Performance Counter,每一个Performance Counter又会有很多实例,例如:在Process目录下,有很多Performance Counter,其中一个是%ProcessTime,表示CPU占用时间的Performance Counter,选择此Performance Counter,又会看到很多实例,每个实例的名字就是进程的名字,选择一个实例,就可以看到指定进程占用CPU时间的Performance Counter数据。有时候你会发现选择一个Performance Counter后并没有与之相关的任何实例,这表示该Performance Counter只能有一个实例。
在.Net中读取和写入PerformanceCounter数据都非常简单。在操作PerformanceCounter数据之前,首先要创建PerformanceCounterCategory,这只是对PerformanceCounter的一个简单分类,以便于查看PerformanceCounter数据。由于目录不能重复创建,所以需要在创建之前检测目录是否存在,如果存在可以继续使用,也可以对其进行删除,然后再创建它。对目录的删除和创建都需要管理员权限,所以,假如运行应用程序的账户不是管理员,操作目录就会抛出异常。所以应该在安装的时候创建目录,运行的时候只需要读取目录信息就可以了。
string categoryName = "My Service";
if (PerformanceCounterCategory.Exists(categoryName))
{
PerformanceCounterCategory.Delete(categoryName);
}
上面的代码展示了如何检测和删除目录。
对于创建目录,我们需要指定如下信息:
• 目录名
• 帮助描述,用于帮助用户了解此目录的用途
• 目录类型,目录类型是一个枚举类型,具有如下定义:
public enum PerformanceCounterCategoryType
{
Unknown = -1,
SingleInstance = 0,
MultiInstance = 1,
}
SingleInstance表示目录内部的PerformanceCounter只能有一个实例。MultiInstance表示目录内部的PerformanceCounter可以有多个实例,如果指定了SingleInstance,则在创建PerformanceCounter实例的时候,不需要指定InstanceName属性,否则会抛出异常。按照我的理解,此属性更应该属于CounterCreationData类。此类用于设置PerformanceCounter相关属性。
• 一个CounterCreationDataCollection的实例
此集合对象包含了创建Perfor
在.Net中读取和写入PerformanceCounter数据都非常简单。在操作PerformanceCounter数据之前,首先要创建PerformanceCounterCategory,这只是对PerformanceCounter的一个简单分类,以便于查看PerformanceCounter数据。由于目录不能重复创建,所以需要在创建之前检测目录是否存在,如果存在可以继续使用,也可以对其进行删除,然后再创建它。对目录的删除和创建都需要管理员权限,所以,假如运行应用程序的账户不是管理员,操作目录就会抛出异常。所以应该在安装的时候创建目录,运行的时候只需要读取目录信息就可以了。
string categoryName = "My Service";
if (PerformanceCounterCategory.Exists(categoryName))
{
PerformanceCounterCategory.Delete(categoryName);
}
上面的代码展示了如何检测和删除目录。
对于创建目录,我们需要指定如下信息:
• 目录名
• 帮助描述,用于帮助用户了解此目录的用途
• 目录类型,目录类型是一个枚举类型,具有如下定义:
public enum PerformanceCounterCategoryType
{
Unknown = -1,
SingleInstance = 0,
MultiInstance = 1,
}
SingleInstance表示目录内部的PerformanceCounter只能有一个实例。MultiInstance表示目录内部的PerformanceCounter可以有多个实例,如果指定了SingleInstance,则在创建PerformanceCounter实例的时候,不需要指定InstanceName属性,否则会抛出异常。按照我的理解,此属性更应该属于CounterCreationData类。此类用于设置PerformanceCounter相关属性。
• 一个CounterCreationDataCollection的实例
此集合对象包含了创建Perfor