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.