views:

236

answers:

2

I have a Windows service that runs implementations of a framework across multiple threads. Each running instance has several things in common that I need to keep track of, for example, number of items processed, last time an item was processed, etc. On top of this base monitoring data, I'd like to offer functionality in the framework to allow implementations to dynamically add their own monitoring data.

I've worked with PerformanceCounters before, and though they offer decent functionality, I find the code to create and maintain them to be quite cumbersome, as well as being loaded with the possibility of instance-related pitfalls (i.e., hard-coding a counter instance name, category name, and counter type). Also, I'm not certain that I could offer simple base functionality dynamic counter creation without writing a massive amount of code.

Has anyone implemented something like this using PerformanceCounters? If so, would you recommend it? If not, does anyone have a suggestion for a medium that I can easily write performance/health-monitoring data to that wouldn't introduce 1) a lot of slowdown and 2) another point of failure?

Thanks, and I'm happy to add clarification if necessary, as I know this is somewhat nebulous.

Conclusion:

I ended up implementing performance counters. It was a bit of a PITA (heh), but my boss was really into the idea and now that I've figured it out, it's not so bad. I was hoping for something a little more easily configurable with a simpler way to present hierarchical data. But this works fine, and it's hard to argue with the built-in interface.

A: 

Agreed, it can take a bit of time to put together code that leverages performance counters. However, last time I did this I wrapped it all up in a nice reusable class. It made it much simpler for me to use perf counters throughout my code base with minimal friction.

The end result was well worth it to me, given the tooling that exists on top of perf counters (perfmon is a big boon).

HTH, Kent

Kent Boogaart
How much for your reusable class? I'm lazy! j/k ;-)
AJ
A: 

Have you considered using the Instrumentation classes from Enterprise Library? Can't say anything pro/con the EntLib, but it seems to gain popularity, and Microsoft seem to continue to invest in it...

http://msdn.microsoft.com/en-us/library/dd203352.aspx

SaguiItay