Today, I had to implement custom performance counters in one of our applications.
I haven’t worked much with performance counters before, so I wanted to check
the Internet for some good articles and maybe some helper classes or wrappers around
the functionality.
I found this article, which does an excellent job explaining how to go about it. But it didn’t offer any
helper class or plug ‘n play wrapper, so I decided to build my own. Then I can use
it the next time I have to implement performance counters in .NET.
The code is not very complicated, and I think it is pretty self explanatory. It consist
of a helper class and a method that calls this helper class.
#region Using
using System;
using System.Diagnostics;
#endregion
namespace PerformanceCounters
{
/// <summary>
/// A helper class to create the specified performance counters.
/// </summary>
public class PerfmormanceMonitor
{
/// <summary>
/// Creates an instance of the class.
/// </summary>
/// <param name="categoryName">The name of the performance counter category.</param>
public PerfmormanceMonitor(string categoryName)
{
this._Category = categoryName;
}
private CounterCreationDataCollection
_Counters = new CounterCreationDataCollection();
private string _Category = string.Empty;
/// <summary>
/// Creates the performance counters
/// </summary>
public void CreateCounters()
{
if (!PerformanceCounterCategory.Exists(_Category))
{
PerformanceCounterCategory.Create(this._Category, this._Category, PerformanceCounterCategoryType.Unknown, this._Counters);
}
}
/// <summary>
/// Add a performance counter to the category of performance counters.
/// </summary>
public void AddCounter(string name, string helpText, PerformanceCounterType type)
{
CounterCreationData ccd = new CounterCreationData();
ccd.CounterName = name;
ccd.CounterHelp = helpText;
ccd.CounterType = type;
this._Counters.Add(ccd);
}
}
}
And here is the method that uses the helper class:
using System.Diagnostics;
static void CreatePerformanceCounter()
{
PerfmormanceMonitor mon = new PerfmormanceMonitor("Headlight
Parser");
mon.AddCounter("#
operations executed", "Total
number of executed commands", PerformanceCounterType.NumberOfItems64);
mon.AddCounter("#
logfiles parsed", "Total
number of logfiles parsed", PerformanceCounterType.NumberOfItems64);
mon.AddCounter("#
operations / sec", "Number
of operations executed per second", PerformanceCounterType.RateOfCountsPerSecond32);
mon.AddCounter("average
time per operation", "Average
duration per operation execution", PerformanceCounterType.AverageTimer32);
mon.AddCounter("average
time per operation base", "Average
duration per operation execution base", PerformanceCounterType.AverageBase);
mon.CreateCounters();
}
The functionality could be greatly expanded in the helper class, but I haven't got
the time for it at the moment.
* $4.95/month BlogEngine.net Hosting – Click Here!