Create performance counters using .NET and C#
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.
Comments
Comments are closed