下面是一个简单的实现 操作自定义window performance counter的实例。在运行程序的过程中我们通过操作系统的performance面板查看或者写log文件,对我们应用程序的性能进行监视,分析。将有助于我们分析解决系统的性能等问题。
代码功能:
1,实现添加一个counter 类别
2,添加一个或者多个counter对象
3,获取counter对象,并赋值。
在系统的performance 面板中查看。效果如下图:
代码:
using
System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace WritePerformanceLog
{
class Program
{
static void Main( string [] args)
{
if ( ! PerformanceCounterCategory.Exists( " test_Category_1 " ))
{
// Create a collection of type CounterCreationDataCollection.
System.Diagnostics.CounterCreationDataCollection CounterDatas =
new System.Diagnostics.CounterCreationDataCollection();
// Create the counters and set their properties.
System.Diagnostics.CounterCreationData cdCounter1 =
new System.Diagnostics.CounterCreationData();
System.Diagnostics.CounterCreationData cdCounter2 =
new System.Diagnostics.CounterCreationData();
cdCounter1.CounterName = " Counter1 " ;
cdCounter1.CounterHelp = " help string1 " ;
cdCounter1.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64;
cdCounter2.CounterName = " Counter2 " ;
cdCounter2.CounterHelp = " help string 2 " ;
cdCounter2.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64;
// Add both counters to the collection.
CounterDatas.Add(cdCounter1);
CounterDatas.Add(cdCounter2);
// Create the category and pass the collection to it.
System.Diagnostics.PerformanceCounterCategory.Create(
" test_Category_1 " , " Category help " , CounterDatas);
}
else
{
PerformanceCounter cdCounter1 = new PerformanceCounter( " test_Category_1 " , " Counter1 " , false );
PerformanceCounter cdCounter2 = new PerformanceCounter( " test_Category_1 " , " Counter2 " , false );
cdCounter1.ReadOnly = false ;
for ( int i = 0 ;i < 10000 ;i ++ )
{
cdCounter1.RawValue = i;
// cdCounter1.Increment();
cdCounter2.RawValue = i + 1 ;
Thread.Sleep( 100 );
}
Console.WriteLine(cdCounter1.NextValue());
Console.WriteLine(cdCounter2.RawValue);
Console.WriteLine(cdCounter1.NextSample());
Console.Read();
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace WritePerformanceLog
{
class Program
{
static void Main( string [] args)
{
if ( ! PerformanceCounterCategory.Exists( " test_Category_1 " ))
{
// Create a collection of type CounterCreationDataCollection.
System.Diagnostics.CounterCreationDataCollection CounterDatas =
new System.Diagnostics.CounterCreationDataCollection();
// Create the counters and set their properties.
System.Diagnostics.CounterCreationData cdCounter1 =
new System.Diagnostics.CounterCreationData();
System.Diagnostics.CounterCreationData cdCounter2 =
new System.Diagnostics.CounterCreationData();
cdCounter1.CounterName = " Counter1 " ;
cdCounter1.CounterHelp = " help string1 " ;
cdCounter1.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64;
cdCounter2.CounterName = " Counter2 " ;
cdCounter2.CounterHelp = " help string 2 " ;
cdCounter2.CounterType = System.Diagnostics.PerformanceCounterType.NumberOfItems64;
// Add both counters to the collection.
CounterDatas.Add(cdCounter1);
CounterDatas.Add(cdCounter2);
// Create the category and pass the collection to it.
System.Diagnostics.PerformanceCounterCategory.Create(
" test_Category_1 " , " Category help " , CounterDatas);
}
else
{
PerformanceCounter cdCounter1 = new PerformanceCounter( " test_Category_1 " , " Counter1 " , false );
PerformanceCounter cdCounter2 = new PerformanceCounter( " test_Category_1 " , " Counter2 " , false );
cdCounter1.ReadOnly = false ;
for ( int i = 0 ;i < 10000 ;i ++ )
{
cdCounter1.RawValue = i;
// cdCounter1.Increment();
cdCounter2.RawValue = i + 1 ;
Thread.Sleep( 100 );
}
Console.WriteLine(cdCounter1.NextValue());
Console.WriteLine(cdCounter2.RawValue);
Console.WriteLine(cdCounter1.NextSample());
Console.Read();
}
}
}
}