Create and use your own performance counters to see how you program is doing in performancetests, stresstests, production, …
First register the performance counters. This is done with a PerformanceCounterCategory that contains the CounterCreationData objects for the performance counters. Be sure to check it doesn’t already exists or an exception is thrown.
// create performance counters if not already existing
if (PerformanceCounterCategory.Exists(CATEGORY) == false)
{
var counters = new CounterCreationDataCollection();
// create reads per second performance counter
var reads = new CounterCreationData();
reads.CounterName = "# reads per second";
reads.CounterHelp = "Number of reads per second";
reads.CounterType = PerformanceCounterType.RateOfCountsPerSecond32;
counters.Add(reads);
// create writes per second performance counter
var writes = new CounterCreationData();
writes.CounterName = "# writes per second";
writes.CounterHelp = "Number of writes per second";
writes.CounterType = PerformanceCounterType.RateOfCountsPerSecond32;
counters.Add(writes);
// create number of exceptions performance counter
var fails = new CounterCreationData();
fails.CounterName = "# failed actions";
fails.CounterHelp = "Number of failed actions";
fails.CounterType = PerformanceCounterType.NumberOfItems32;
counters.Add(fails);
// create new category with the counters above
PerformanceCounterCategory.Create(CATEGORY, "My Project Category", PerformanceCounterCategoryType.SingleInstance, counters);
}
After the category is created you can use the PerformanceCounters in your code. You don’t need to create a new instance of the PerformanceCounter every time it needs to be incremented. I always create a variable at the start of a thread and use it in that thread only.
var reads = new PerformanceCounter(CATEGORY, "# reads per second", false); // register a read with the performance counter reads.Increment();
Clean up at the end of your program, the code below will remove the performance counters again.
// clean up the performance counters at the end of your program
if (PerformanceCounterCategory.Exists(CATEGORY) == true)
{
PerformanceCounterCategory.Delete(CATEGORY);
}
If you don’t see any value changes in the Performance Monitor try closing and opening the Performance Monitor.