一 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
"
);