title: Performance monitoring/metrics in .NET app
body: <p>We want to gather performance data about our (say 80% WinApp) application, both internally in dev, as well as out at customer sites.  Our objectives are the following:</p>
  
  <ul>
  <li>It should be <strong>very</strong> fast</li>
  <li>It should be lightweight</li>
  <li>It should allow for tracking/timing &amp; counting many different kinds of events across our apps.</li>
  <li>It should be able to gather (efficiently) a fair amount of data such as Domain, ComputerName, User, OS, Memory, Etc.</li>
  <li>All data collected should be analyzable (once it's been transmitted to our in-house BI database) across all of the dimensions mentioned above.</li>
  </ul>
  
  <p>It would also, ideally, be relatively configurable on a site-wide or user-by-user basis to control:</p>
  
  <ul>
  <li>If these performance metrics are even collected</li>
  <li>How verbosely to collect them</li>
  <li>Whether to report the results back to us</li>
  </ul>
  
  <p>We have been planning to essentially write our own system for doing most of this.  We are then looking at a number of different "persistence" models, including the Binary Formatting of "performance packets", XmlSerialization and the Trace Logging functionality that is  already part of the .NET framework, just to name a few.</p>
  
  <p>Before engaging in this though, I wanted to double check to see what recommendations "the crowd" suggests.  I've described what we are trying to do, and essentially our current plan of action - but I'm looking for <strong>any and all</strong> suggestions about how to best solve the problem at hand.</p>
  
  <p>Thanks in advance.</p>