<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>David Kline : Performance</title><link>http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx</link><description>Tags: Performance</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>.NET Compact Framework v3.5 Power Toys CTP</title><link>http://blogs.msdn.com/davidklinems/archive/2007/09/13/net-compact-framework-v3-5-power-toys-ctp.aspx</link><pubDate>Thu, 13 Sep 2007 20:59:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4897422</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/4897422.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=4897422</wfw:commentRss><description>&lt;p&gt;The .NET Compact Framework team made an exciting CTP available this week.&amp;#xA0; The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C8174C14-A27D-4148-BF01-86C2E0953EAB&amp;amp;displaylang=en"&gt;.NET Compact Framework v3.5 Power Toys September 2007 CTP&lt;/a&gt; release contains some old friends (ex: Remote Performance Monitor) and ads some great new ones (Service Model Metadata Tool, App Configuration Tool, etc).     &lt;br /&gt;    &lt;br /&gt;Here's what the download page has to say about the included tools:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="1" width="75%" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="398"&gt;&lt;strong&gt;Remote Performance Monitor and GC Heap Viewer&lt;/strong&gt; &amp;#x2013; Provides real time counter data (ranging from Garbage Collector activity to type loading info) on a running NETCF application. The GC Heap Viewer feature allows you to capture the managed heap at any moment your app is running to view live references, and allows you to compare multiple snapshots to find memory leak issues.           &lt;br /&gt;          &lt;br /&gt;&lt;b&gt;NETCF CLR Profiler&lt;/b&gt; &amp;#x2013; CLR Profiler is an instrumenting allocation profiler for NETCF applications. It provides detailed allocation visualizations, allocation callstacks visualizations and useful for diagnosing memory management issues.           &lt;br /&gt;          &lt;br /&gt;&lt;b&gt;App Configuration Tool (NetCFcfg.exe)&lt;/b&gt; - On-device tool for specifying what version of the NETCF runtime an application will run against, displaying installed versions of NETCF and displaying info about DLLs in the GAC.           &lt;br /&gt;          &lt;br /&gt;&lt;b&gt;NETCF ServiceModel Metadata Tool&lt;/b&gt; &amp;#x2013; The .NET Compact Framework ServiceModel Metadata Tool (netcfsvcutil.exe) allows you to generate a Windows Communication Foundation (WCF) client proxy to help developers consume WCF services on device. Like svcutil.exe, which is the desktop version of the utility, netcfsvcutil.exe is a command-line tool that generates service model code from metadata documents and generates metadata documents from service model code.           &lt;br /&gt;          &lt;br /&gt;&lt;b&gt;Remote Logging Configuration Tool&lt;/b&gt; &amp;#x2013; The Logging Configuration Tool enables users to easily configure logging options on a NETCF device including: loader, interop, network, error and finalizer logs.           &lt;br /&gt;          &lt;br /&gt;&lt;b&gt;NETCF Network Log Viewer&lt;/b&gt; &amp;#x2013; A utility for viewing NETCF network log data. &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/danhorbatt/"&gt;Dan Horbatt&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/andrewarnottms/"&gt;Andrew Arnott&lt;/a&gt; talk in detail about the new Service Model Metadata Tool &lt;a href="http://blogs.msdn.com/danhorbatt/archive/2007/09/12/using-compact-svcutil-to-interact-with-servicecontracts.aspx"&gt;here&lt;/a&gt; (Dan) and &lt;a href="http://blogs.msdn.com/andrewarnottms/archive/2007/09/13/calling-wcf-services-from-netcf-3-5-using-compact-wcf-and-netcfsvcutil-exe.aspx"&gt;here&lt;/a&gt; (Andrew).     &lt;br /&gt;    &lt;br /&gt;I highly recommend downloading and using the power toys.&amp;#xA0; And as always, please send us your &lt;a href="http://connect.microsoft.com/visualstudio/feedback"&gt;feedback&lt;/a&gt;.     &lt;br /&gt;    &lt;br /&gt;Enjoy!     &lt;br /&gt;-- DK     &lt;br /&gt;    &lt;br /&gt;&lt;font face="Arial" size="1"&gt;Disclaimer(s):      &lt;br /&gt;This posting is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.       &lt;br /&gt;The information contained within this post is in relation to beta software.&amp;#xA0; Any and all details are subject to change.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4897422" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Announcements/default.aspx">Announcements</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Diagnostics/default.aspx">Diagnostics</category></item><item><title>Testing performance</title><link>http://blogs.msdn.com/davidklinems/archive/2007/06/08/testing-performance.aspx</link><pubDate>Fri, 08 Jun 2007 22:41:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3167951</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/3167951.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=3167951</wfw:commentRss><description>&lt;p&gt;A couple of weeks ago, I described the &lt;a href="http://blogs.msdn.com/davidklinems/archive/2007/05/24/testing-priorities.aspx"&gt;test development priorities&lt;/a&gt; for the .NET Compact Framework team.&amp;nbsp; As part of that discussion, I stated that performance should be tested in parallel with the other forms of testing (unit, customer scenarios, etc).&amp;nbsp; Today, I would like to spend some time talking about performance testing.&lt;br&gt;&lt;br&gt;&lt;strong&gt;General considerations&lt;br&gt;&lt;/strong&gt;When testing performance, there are a few key things to keep in mind.&amp;nbsp; &lt;br&gt;&lt;br&gt;First, it is important to measure the intended scenario.&amp;nbsp; In the past, I have seen a number of tests that were intended to time a data processing operation &amp;nbsp;(ex: sort algorithm) that&amp;nbsp;inadvertently&amp;nbsp;included the time to load the data from the file system.&amp;nbsp;&amp;nbsp;As a result, the&amp;nbsp;performance data being reported was quite inaccurate.&lt;br&gt;&lt;br&gt;Second, since today's operating systems are multi-tasking, it is recommended to test performance on as clean of a system (fewest running processes) as possible and to run the performance test multiple times to ensure accurate data.&amp;nbsp; Depending on the scenario being timed, the jitter (variance in results) can be significant and important to take into account when reporting results.&amp;nbsp; I will talk a bit more about performance reporting shortly.&lt;br&gt;&lt;br&gt;Lastly, I have found that most meaningful performance measurements for applications I have written are when the application is in sustained operation.&amp;nbsp; What I mean by this is that any Just-In-Time compilation has already occurred and I am measuring the typical run time performance of my scenario.&amp;nbsp; Most often, code is Just-In-Time compiled once per instance of the application, so the performance impact is felt only the first time the method is called.&amp;nbsp; There are some exceptions to this rule of thumb, and I have found that in those cases, even when pre-JIT compiling&amp;nbsp;the scenario, the results are reasonably accurate.&amp;nbsp; What are these exceptions?&amp;nbsp; Memory pressure and moving the application to the background.&amp;nbsp; In each of these cases, the .NET Compact Framework's Garbage Collector will run and may discard JIT compiled code and be forced to recompile when the situation is resolved (memory has been freed, the application is brought to the foreground).&amp;nbsp; In both of these cases, the timing loop will reflect the time spent freeing memory and re-JIT compiling.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Macro-benchmarks&lt;br&gt;&lt;/strong&gt;Macro-benchmarks are performance tests for long duration scenarios.&amp;nbsp; By "long", I mean that the scenario takes a second or more to complete.&amp;nbsp; When testing macro-benchmarks, I typically run the scenario a handful (10-50) times in a loop.&amp;nbsp; Because the scenario takes a significant amount of time to run, the time spent looping does not significantly impact the measurements.&amp;nbsp; When the timing loop is complete, dividing the time spent (number of elapsed ticks) by the number of loop iterations results in the scenario's performance measurement, as shown in the following example.&lt;br&gt;&lt;code&gt;&lt;br&gt;// run the scenario once (to avoid timing the initial Just-In-Time compile)&lt;br&gt;Scenario(data);&lt;br&gt;&lt;br&gt;// timing loop&lt;br&gt;Int32 iterations = 10;&lt;br&gt;Int32 start_ms = Environment.TickCount;&lt;br&gt;for(Int32 i = 0; i &amp;lt; iterations; i++)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;}&lt;br&gt;Int32 finish_ms = Environment.TickCount;&lt;br&gt;&lt;br&gt;// calculate the performance&lt;br&gt;Double average_ms= (Double)(finish_ms - start_ms) / (Double)(iterations);&lt;br&gt;&lt;/code&gt;&lt;br&gt;Macro-benchmarks are often based on customer scenarios and improving their performance can often lead to significant gains in customer satisfaction.&amp;nbsp; At times, making improvements to macro-benchmarks requires changes to the scenario implementation.&amp;nbsp; To address this, I highly recommend measuring your scenarios as early as possible in the development of the product.&amp;nbsp; That way, if the performance does not meet the requirements, there is time to write and test the new implementation.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Micro-benchmarks&lt;br&gt;&lt;/strong&gt;Micro-benchmarks are performance tests on the small scale, measuring very short duration operations.&amp;nbsp; To get an accurate measurement, performance tests need to run the scenario a large number of times (I typically run my micro-benchmark scenarios 10,000 or more times).&amp;nbsp; Also, it is important to keep in mind that, unlike macro-benchmarks, the time spent looping can significantly impact the performance measurements.&amp;nbsp; To minimize these impacts, I recommend what I call "playing optimizing compiler" and partially unrolling your timing loop.&amp;nbsp; The example below updates the macro-benchmark example for micro-benchmark testing.&lt;br&gt;&lt;code&gt;&lt;br&gt;// run the scenario once (to avoid timing the initial Just-In-Time compile)&lt;br&gt;Scenario(data);&lt;br&gt;&lt;br&gt;Int32 iterations = 1000;&lt;br&gt;Int32 callsInLoop = 10;&lt;br&gt;&lt;br&gt;// timing loop&lt;br&gt;Int32 start_ms = Environment.TickCount;&lt;br&gt;for(Int32 i = 0; i &amp;lt; iterations; i++)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario(data);&lt;br&gt;}&lt;br&gt;Int32 finish_ms = Environment.TickCount;&lt;br&gt;&lt;br&gt;// calculate the performance&lt;br&gt;Double average_ms= (Double)(finish_ms - start_ms) / (Double)(iterations * callsInLoop);&lt;br&gt;&lt;/code&gt;&lt;br&gt;Since the scenario is very short, this test runs the code 10,000 times and partially unrolls the loop (1,000 iterations of 10 calls).&amp;nbsp; This significantly minimizes the impact of the time spent looping.&amp;nbsp; In one example scenario I tested, the time spent&amp;nbsp;when in a&amp;nbsp;tight loop (10,000&amp;nbsp;iterations of 1 call),&amp;nbsp;was reported as 1 millisecond.&amp;nbsp; When&amp;nbsp;using the timing loop shown above, &amp;nbsp;that time was reduced to 0.95 milliseconds - 5% faster than previously reported.&amp;nbsp; With additional loop unrolling&amp;nbsp;(ex: 500 iterations of 20 calls) we can further improve the accuracy of the measurement.&amp;nbsp; Of course, there is a point of diminishing returns when continued unrolling becomes unrealistic and the improved measurement accuracy is no longer significant.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Reporting performance results&lt;br&gt;&lt;/strong&gt;I mentioned results reporting earlier.&amp;nbsp; When I report performance results, I use one of two methods:&amp;nbsp;raw speed reporting and what&amp;nbsp;I call "gymnastics" reporting.&lt;br&gt;&lt;br&gt;In raw speed reporting, I run my performance test multiple times (the exact number depending on whether or not I am timing a micro- or macro-benchmark) and keeping only the fastest result.&amp;nbsp; This approach helps to factor out the sometimes subtle differences in results when running on multi-tasking operating systems (ex: the scheduler runs a background task) and is closer to the maximum throughput of the code.&lt;br&gt;&lt;br&gt;In "gymnastics" reporting, I again run my performance test multiple times, but this time, I discard the extreme results (fastest and slowest) and average the remaining data.&amp;nbsp; The resulting data is closer to the typical performance that the customer will see during everyday use of the product.&lt;br&gt;&lt;br&gt;Take care!&lt;br&gt;-- DK&lt;br&gt;&lt;br&gt;&lt;font face="Arial" size="1"&gt;Disclaimers:&lt;br&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3167951" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Testing/default.aspx">Testing</category></item><item><title>Using the .NET Compact Framework Remote Performance Monitor to Configure Diagnostic Options</title><link>http://blogs.msdn.com/davidklinems/archive/2006/08/31/734123.aspx</link><pubDate>Thu, 31 Aug 2006 23:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:734123</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/734123.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=734123</wfw:commentRss><description>Diagnostic, performance and debugging tools are very cool.&amp;nbsp; The more tools available, the easier it tends to be to find and fix application issues.&amp;nbsp; With Visual Studio 2005, several handy tools were added.&amp;nbsp; I use the Remote Registry Editor and Remote File Viewer just about every day.&amp;nbsp; Version 2 of the .NET Compact Framework added diagnostic logs (enabled via the device registry) to help identify application problems in places where it was very difficult, or not possible to find them with other tools.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;One difficulty with using the diagnostic logs is setting the registry options.&amp;nbsp; Modifying the registry can be intimidating and, if done incorrectly, a risky proposition.&amp;nbsp; Readers familiar with my writings on using the diagnostic logs will recall that every time I mention the Remote Registry Editor, I include a warning to use the tool with great care.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;A few months ago, &lt;A href="http://blogs.msdn.com/stevenpr"&gt;Steven&lt;/A&gt; posted a tour of the &lt;A href="http://blogs.msdn.com/stevenpr/archive/2006/04/17/577636.aspx"&gt;.NET Compact Framework Remote Performance Monitor&lt;/A&gt;.&amp;nbsp; He talked about installation, getting connected, publishing the statistics to the Windows Performance Monitor and touched upon what I am going to talk about today.&lt;BR&gt;&lt;BR&gt;Did you know that you can use the .NET Compact Framework Remote Performance Monitor to configure diagnostic options on a device?&lt;BR&gt;&lt;BR&gt;The other day, I was writing about &lt;A href="http://blogs.msdn.com/davidklinems/archive/2006/08/25/724718.aspx"&gt;using the MDbg command line debugger to attach to a .NET Compact Framework application&lt;/A&gt; and I needed to enable attach to process support.&amp;nbsp; On my way to the Start menu to run the Remote Registry Editor, I noticed that I had the .NET Compact Framework Remote Performance Monitor running and remembered that it could configure the device registry for me.&amp;nbsp; Having had the experience of&lt;A href="http://blogs.msdn.com/davidklinems/archive/2006/06/16/634503.aspx"&gt; incorrectly modifying this very registry flag while presenting at MEDC&lt;/A&gt;, I decided to save myself the embarrassment of making the same mistake again.&lt;BR&gt;&lt;BR&gt;On the Device menu of the .NET Compact Framework Remote Performance Monitor,&amp;nbsp;select&amp;nbsp;Logging Options.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/photos/davidklinems/picture734104.aspx" target=_blank&gt;&lt;IMG src="http://blogs.msdn.com/photos/davidklinems/images/734104/464x358.aspx" border=0&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The first step that is required is to connect to your device.&amp;nbsp; The steps to connect here are the same as those &lt;A href="http://blogs.msdn.com/stevenpr/archive/2006/04/17/577636.aspx"&gt;Steven describes to connect to the performance statistics&lt;/A&gt;.&amp;nbsp; Once connected, you can configure your desired diagnostic settings.&lt;BR&gt;&lt;BR&gt;Once connected, you can 
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Enable the &lt;A href="http://blogs.msdn.com/stevenpr/archive/2005/02/28/381744.aspx"&gt;Loader&lt;/A&gt;, &lt;A href="http://blogs.msdn.com/stevenpr/archive/2005/06/22/431612.aspx"&gt;Native Interop&lt;/A&gt; and Network logs&lt;/LI&gt;
&lt;LI&gt;Configure log file naming options&lt;/LI&gt;
&lt;LI&gt;Enable &lt;A href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502125.aspx"&gt;performance statistics&lt;/A&gt; (.stat) file creation&lt;/LI&gt;
&lt;LI&gt;Enable &lt;A href="http://blogs.msdn.com/davidklinems/archive/2005/05/24/421566.aspx"&gt;attach to process support in the debugger&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Enjoy!&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s): This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=734123" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Diagnostics/default.aspx">Diagnostics</category></item><item><title>Application Performance: Value Type Boxing</title><link>http://blogs.msdn.com/davidklinems/archive/2006/05/26/608436.aspx</link><pubDate>Sat, 27 May 2006 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:608436</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/608436.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=608436</wfw:commentRss><description>One of the most popular .NET Compact Framework demos at MEDC 2006 was the &lt;A HREF="/stevenpr/archive/2006/04/17/577636.aspx"&gt;.NET Compact Framework Remote Performance Monitor&lt;/A&gt;.&amp;nbsp; While working at our booth on the expo floor, I used the .NET Compact Framework Performance Monitor to examine the performance of a simple application that I wrote on the booth PC. &lt;BR&gt;&lt;BR&gt;If you had the opportunity to attend &lt;A HREF="/ryanms"&gt;Ryan Chapman&lt;/A&gt;'s MEDC session on optimizing for performance, much of what I talk about today will be very familiar.&lt;BR&gt;&lt;BR&gt;The application that I wrote was intentionally ill-performing -- it created a strongly typed collection of integers and copied the collection's data into a collection that was not strongly typed (ex: ArrayList) in a tight loop.&amp;nbsp; Because integers are value types, I knew that boxing would be an issue with this application.&amp;nbsp; What I didn't realize is just how much of an issue boxing could prove to be.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Please note&lt;/B&gt;: What follows is a very contrived example intended to show a "worst case" scenario related to the boxing of value types.&amp;nbsp; When designing your application, it is very important to measure performance of algorithms early and often.&amp;nbsp; If your algorithm meets your performance goals, there is no need to dwell on worst case micro-benchmarks.&lt;BR&gt;&lt;/I&gt;&lt;BR&gt;&lt;B&gt;Example of extreme boxing&lt;BR&gt;&lt;/B&gt;The snippet below is based on the example I demonstrated in our booth at MEDC.&lt;BR&gt;&lt;BR&gt;&lt;CODE&gt;List&amp;lt;Int32&amp;gt; numberList = new List&amp;lt;Int32&amp;gt;();&lt;BR&gt;for(Int32 i = 0; i &amp;lt; 13; i++)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberList.Add(i);&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;ArrayList listCopy = new ArrayList();&lt;BR&gt;for(Int32 i = 0; i &amp;lt; 100000; i++)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // make a copy of the collection&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(Int32 num in numberList)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listCopy.Add(num);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // we no longer need the list contents&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; listCopy.Clear();&lt;BR&gt;}&lt;/CODE&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Diagnosing the performance of the application&lt;BR&gt;&lt;/B&gt;Before the release of the .NET Compact Framework version 2 service pack 1 beta, the implications of excessive boxing can be seen by &lt;A HREF="/davidklinems/archive/2005/10/04/476988.aspx"&gt;enabling performance counters&lt;/A&gt; and &lt;A HREF="/davidklinems/archive/2006/05/25/607319.aspx"&gt;examining the data in the .stat file&lt;/A&gt;.&amp;nbsp; Let's take a look at some of the interesting data.
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 width="60%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD&gt;19476&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD&gt;1300000&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD&gt;15508684&lt;/TD&gt;
&lt;TD&gt;1112444&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;1107763&lt;/TD&gt;
&lt;TD&gt;1046912&lt;/TD&gt;
&lt;TD&gt;1112444&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD&gt;300&lt;/TD&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;21&lt;/TD&gt;
&lt;TD&gt;19&lt;/TD&gt;
&lt;TD&gt;25&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;34&lt;/TD&gt;
&lt;TD&gt;557056&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;1114112&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;This example generated boxed 1,300,000 times and the Garbage Collector ran 14 times in under 20 seconds!&amp;nbsp; That is an incredible rate of collection.&amp;nbsp; From the GC latency time, we can see that the Garbage Collector was running very efficiently since there were not many live objects at the time of the collections.&lt;BR&gt;&lt;BR&gt;Please notice that even though we collected a large amount of data (15,508,684 bytes) during the runtime of the application, the device was not put under heavy memory pressure -- the GC Heap stayed below 1 MB for the duration of the application.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Removing the boxing&lt;BR&gt;&lt;/B&gt;If we modify the example to replace the ArrayList with a second List&amp;lt;Int32&amp;gt; and re-run the test, we see the following data.&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 width="60%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD&gt;9408&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD&gt;-&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;32768&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;65536&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;As we can see from this set of data, the second version took less than half of the time to run as did the first -- all boxing has been eliminated and no garbage collections occurred.&amp;nbsp; We also used considerably less memory (only 64k) since no objects needed to be constructed.&lt;BR&gt;&lt;BR&gt;If you use the .NET Compact Framework Remote Performance Monitor, the data above becomes very easy to see in real time.&lt;BR&gt;&lt;BR&gt;During the MEDC booth demo, I ran these examples in tight loops within a worker thread.&amp;nbsp; After 20-30 minutes, the counter for Bytes Collected By GC pegged (got to Int32.MaxValue).&amp;nbsp; We were still collecting, but the counters could no longer track how much data we collected yet the GC Heap size never exceeded 1114112 bytes.&amp;nbsp; The application was doing a huge number of collections, yet was still memory "friendly" on the device.&lt;BR&gt;&lt;BR&gt;Please be sure to remember that this is an extreme micro-benchmark example.&amp;nbsp; Value type boxing can be useful in moderation, and does not necessarily cause dramatic application performance issues by itself.&amp;nbsp; It is important to measure application / algorithm performance early and often.&lt;BR&gt;&lt;BR&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights. &lt;BR&gt;Some of the information contained within this post may be in relation to beta software. Any and all details are subject to change. &lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=608436" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Using .stat Files with the .NET Compact Framework Remote Performance Monitor</title><link>http://blogs.msdn.com/davidklinems/archive/2006/05/25/607319.aspx</link><pubDate>Thu, 25 May 2006 10:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:607319</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/607319.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=607319</wfw:commentRss><description>&lt;A HREF="/stevenpr/"&gt;Steven Pratschner&lt;/A&gt; recently posted about one of the &lt;A HREF="/stevenpr/archive/2006/04/17/577636.aspx"&gt;coolest new features of the Service Pack 1&lt;/A&gt; beta for .NET Compact Framework version 2 -- the .NET Compact Framework Remote Performance Monitor.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Along with the real-time view of the .NET Compact Framework performance statistics, the Remote Performance Monitor can also load and display counter data from .stat files.&lt;BR&gt;&lt;BR&gt;To use the .NET Compact Framework Remote Performance&amp;nbsp;Monitor to view .stat files you will need to do the following steps.&amp;nbsp; 
&lt;P&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A HREF="/davidklinems/archive/2005/10/04/476988.aspx"&gt;Enable performance counters&lt;/A&gt; in the device's registry&lt;/LI&gt;
&lt;LI&gt;Run and exit your application (this creates the .stat file)&lt;/LI&gt;
&lt;LI&gt;Copy the .stat file to your PC&lt;/LI&gt;
&lt;LI&gt;Run the .NET Compact Framework Remote Performance Monitor (NetCFRPM.exe)&lt;/LI&gt;
&lt;LI&gt;Load the .stat file from the &lt;B&gt;Open .stat&lt;/B&gt; on the &lt;B&gt;File&lt;/B&gt; menu&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Once the file is opened, the .NET Compact Framework Remote Performance Monitor displays the counter data and a brief description of the each counter.&amp;nbsp; Detailed descriptions of the counters can be found &lt;A HREF="/davidklinems/archive/2005/12/09/502125.aspx"&gt;here&lt;/A&gt;. The image below shows the data from one of my demo applications from MEDC 2006.&lt;BR&gt;&lt;BR&gt;&lt;A HREF="/photos/davidklinems/images/607310/original.aspx" target=_blank&gt;&lt;IMG src="/photos/davidklinems/images/607310/640x329.aspx" border=0&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Enjoy!&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights. &lt;BR&gt;Some of the information contained within this post may be in relation to beta software. Any and all details are subject to change. &lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=607319" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Wrapping Unmanaged Resources</title><link>http://blogs.msdn.com/davidklinems/archive/2006/01/10/511315.aspx</link><pubDate>Tue, 10 Jan 2006 22:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:511315</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/511315.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=511315</wfw:commentRss><description>&lt;P&gt;I recently wrote about &lt;A href="/davidklinems/archive/2005/11/16/493580.aspx"&gt;three common causes of memory leaks in managed applications&lt;/A&gt;.&amp;nbsp; In that &lt;A href="/davidklinems/archive/2005/11/16/493580.aspx"&gt;post&lt;/A&gt;, I mentioned that failing to release unmanaged resources was one cause.&amp;nbsp; Today, I'd like to talk a bit about one approach to working with unmanaged resources that has worked well in my code.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Wrapping Unmanaged Resources&lt;BR&gt;&lt;/B&gt;While at MEDC 2005, I showed a simple example of wrapping a DeviceContext (a.k.a. DC) as part of my &lt;I&gt;&lt;B&gt;Debugging .NET Compact Framework Applications&lt;/B&gt;&lt;/I&gt; session.&amp;nbsp; Here, I would like to expand upon that example.&amp;nbsp; In the snippet below, I show finalization and disposal.&amp;nbsp; I will leave it to the reader to add P/Invoke signatures.&lt;BR&gt;&lt;BR&gt;&lt;CODE&gt;//--------------------------------------------------------------------- &lt;BR&gt;//THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY &lt;BR&gt;//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE &lt;BR&gt;//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A &lt;BR&gt;//PARTICULAR PURPOSE. &lt;BR&gt;//---------------------------------------------------------------------&lt;BR&gt;using System;&lt;BR&gt;using System.Diagnostics;&lt;BR&gt;using System.Runtime.InteropServices;&lt;BR&gt;&lt;BR&gt;namespace Snippet&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Wrapper for the Win32 Device Context (DC)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class DeviceContext : IDisposable&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the Win32 Device Context (DC) object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private IntPtr hDC;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // window handle associated with the DC&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private IntPtr hWnd;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Constructor.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="hwnd"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// The window handle for which to retrieve the device context&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DeviceContext(IntPtr hwnd)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // call the p/invoke to get the device context for the specified window handle&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr hdc = GetDC(hwnd);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // verify that the GetDC call succeeded&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(hdc == IntPtr.Zero)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Exception("Failed to get the DeviceContext for the specified window handle");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // store the window handle and device context for future reference&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hWnd = hwnd;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hDC = hdc;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Finalizer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~DeviceContext()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // dispose the object (unmanaged resources)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Dispose(false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Cleanup the object (implementation if IDisposable::Dispose)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Dispose()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clean up our resources (managed and unmanaged resources)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Dispose(true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // suppress finalization&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; the finalizer also calls our cleanup code&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; cleanup need only occur once&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GC.SuppressFinalize(this);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Cleanup resources used by the object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="disposing"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Are we fully disposing the object?&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;nbsp; True will release all managed resources, unmanaged resources are always released&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected virtual void Dispose(Boolean disposing)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(disposing)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*** release any managed resources&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // release unmanaged resources&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(this.hDC == IntPtr.Zero)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // we're already been disposed, nothing left to do&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Int32 ret = ReleaseDC(this.hWnd, this.hDC);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hDC = IntPtr.Zero;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hWnd = IntPtr.Zero;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // assert if the DC was not released.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.Assert(ret != 0,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Failed to release DeviceContext.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*** add desired p/invoke definitions&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/CODE&gt;&lt;BR&gt;&lt;BR&gt;With the resource wrapped, your application can easily interoperate with the native resource.&lt;BR&gt;&lt;BR&gt;&lt;CODE&gt;// get the device context for the primary display&lt;BR&gt;DeviceContext dc = new DeviceContext(IntPtr.Zero);&lt;BR&gt;&lt;BR&gt;//*** perform desired operations on the device context&lt;BR&gt;&lt;BR&gt;// cleanup&lt;BR&gt;dc.Dispose();&lt;BR&gt;&lt;/CODE&gt;&lt;BR&gt;The above snippet uses a &lt;CODE&gt;Debug.Assert&lt;/CODE&gt; to provide notification of a failure when releasing the unmanaged resource:&lt;BR&gt;&lt;BR&gt;&lt;CODE&gt;// assert if the DC was not released.&lt;BR&gt;Debug.Assert(ret != 0, "Failed to release DeviceContext.");&lt;BR&gt;&lt;/CODE&gt;&lt;BR&gt;By running the debug build during development, you can identify scenarios where cleanup fails and take steps to address the issue before the product ships to your customers.&lt;BR&gt;&lt;BR&gt;For additional information regarding finalization and disposal, I recommend reading &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconFinalizeDispose.asp"&gt;Implementing Finalize and Dispose to Clean Up Unmanaged Resources&lt;/A&gt;, on MSDN.&lt;BR&gt;&lt;BR&gt;Enjoy!&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;[Edit: Fixed assert]&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=511315" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/P_2F00_Invoke/default.aspx">P/Invoke</category><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework - Table of Contents and Index</title><link>http://blogs.msdn.com/davidklinems/archive/2005/12/09/502125.aspx</link><pubDate>Fri, 09 Dec 2005 22:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:502125</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/502125.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=502125</wfw:commentRss><description>When a post series gets as long as &lt;I&gt;&lt;B&gt;Monitoring Application Performance on the .NET Compact Framework&lt;/B&gt;&lt;/I&gt; (nine parts), it can be difficult to find exactly the portion you need.&amp;nbsp; To help solve this problem, I've created this table of contents as an addendum to the series.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Monitoring Application Performance on the .NET Compact Framework&lt;/I&gt; table of contents&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 cellPadding=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part V - Version 2 performance counters (Part III: Locks and Threads counters)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VI - Version 2 performance counters (Part IV: Garbage Collector counters)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VII - Version 2 performance counters (Part V: JIT Compiler counters)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VIII - Version 2 performance counters (Part VI: Exceptions, Interop and Networking counters)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part IX - Version 2 performance counters (Part VII: Windows.Forms counters)&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Sometimes an index is more useful than a table of contents.&amp;nbsp; The following tables list the performance counters available in the .NET Compact Framework (versions 1 and 2) and a link to the post in which each is discussed.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;.NET Compact Framework version 1 performance counter index&lt;/B&gt;&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 cellPadding=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;&lt;B&gt;Counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;B&gt;Part&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Execution Engine Startup Time&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Total Program Run Time&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Peak Bytes Allocated&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Objects Allocated&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes Allocated&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Simple Collections&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes Collected By Simple Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes In Use After Simple Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Time In Simple Collect&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Compact Collections&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes Collected By Compact Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes In Use After Compact Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Time In Compact Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Full Collections&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes Collected By Full Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes In Use After Full Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Time In Full Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Application Induced Collections&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Total Bytes In Use After Collection&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes Jitted&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Methods Jitted&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Methods Pitched&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Exceptions&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Calls&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Virtual Calls&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of Virtual Call Cache Hits&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Number Of PInvoke Calls&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;2&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;B&gt;.NET Compact Framework version 2 performance counter index&lt;/B&gt;&lt;/P&gt;
&lt;TABLE id=table4 cellSpacing=0 cellPadding=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;&lt;B&gt;Counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;B&gt;Part&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;3&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;App Domains Created&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;3&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;3&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;3&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Classes Loaded&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;3&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="90%"&gt;Methods Loaded&lt;/TD&gt;
&lt;TD width="10%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;3&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;4&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Pending Timers&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Work Items Queued&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;5&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;GC Compactions&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Code Pitchings&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Pinned Objects&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Objects Finalized&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Process Heap&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Short Term Heap&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;JIT Heap&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;App Domain Heap&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;GC Heap&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;6&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;7&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Methods Jitted&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;7&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;7&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Methods Pitched&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;7&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;7&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;8&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Controls Created&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Brushes Created&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Pens Created&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Regions Created&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Fonts Created&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD width="99%"&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx"&gt;9&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;I (and possibly others on the .NET Compact Framework team) plan to link to this post whenever I discuss performance tuning of applications.&lt;BR&gt;&lt;BR&gt;Enjoy!&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=502125" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework Part IX - Version 2 performance counters (Part VII: Windows.Forms counters)</title><link>http://blogs.msdn.com/davidklinems/archive/2005/12/09/502121.aspx</link><pubDate>Fri, 09 Dec 2005 22:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:502121</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/502121.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=502121</wfw:commentRss><description>This is the seventh (and final) in the series describing the .NET Compact Framework v2 performance counters.&amp;nbsp; For a complete listing of the previous installments, please see the list below.&lt;BR&gt;&lt;BR&gt;Pre-requisite:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 1:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 2:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part V - Version 2 performance counters (Part III: Locks and Threads counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VI - Version 2 performance counters (Part IV: Garbage Collector counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VII - Version 2 performance counters (Part V: JIT Compiler counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VIII - Version 2 performance counters (Part VI: Exceptions, Interop and Networking counters)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The following table lists all of the performance counters available in version 2 of the .NET Compact Framework.&amp;nbsp; The counters highlighted, in yellow, are the ones I will be talking about today. 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Loader&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Program Run Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Unloaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Assemblies Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Classes Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Generics&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Locks and Threads&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Threads in Thread Pool&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pending Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Scheduled Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Work Items Queued&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Contested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Garbage Collector&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Peak Bytes Allocated (native + manged)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes of String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Garbage Collections (GC)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Collected By GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Compactions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Code Pitchings&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Calls to GC.Collect&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pinned Objects&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Not Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Finalized&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Boxed Vlue Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Process Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Short Term Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;JIT Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domain Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;JIT Compiler &lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Native Bytes Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Exceptions&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Exceptions Thrown&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Interop&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Platform Invoke Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using a vtable&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using IDispatch&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Complex Marshaling&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Runtime Callable Wrappers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Networking&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Sent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Received&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Windows.Forms&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Controls Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Brushes Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Pens Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Bitmaps Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Regions Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Fonts Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Graphics Created (FromImage)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.&lt;BR&gt;&lt;BR&gt;I will use the following format to describe each counter.&lt;BR&gt;&lt;I&gt;&lt;B&gt;Counter name&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;Brief description of the counter&lt;BR&gt;Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)&lt;BR&gt;Any additional comments relating to the counter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Windows.Forms Counters&lt;/B&gt;&lt;BR&gt;The &lt;SPAN class=SpellE&gt;Windows.Forms&lt;/SPAN&gt; counters provide details on key objects created by forms based applications. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Controls Created&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of controls (ex: Button) created by the application.&lt;BR&gt;total: Running count of controls&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Brushes Created&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.brush.aspx"&gt;Brush&lt;/A&gt; objects created by the application&lt;BR&gt;total: Running count of brushes&lt;BR&gt;&lt;B&gt;&lt;BR&gt;&lt;I&gt;Pens Created&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.pen.aspx"&gt;Pen&lt;/A&gt; objects created by the application.&lt;BR&gt;total: Running count of pens&lt;BR&gt;&lt;B&gt;&lt;BR&gt;&lt;I&gt;Bitmaps Created&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of &lt;A href="http://msdn2.microsoft.com/library/system.drawing.bitmap.aspx"&gt;Bitmap&lt;/A&gt; objects created by the application.&lt;BR&gt;total: Running count of bitmaps&lt;BR&gt;&lt;B&gt;&lt;BR&gt;&lt;I&gt;Regions Created&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.region.aspx"&gt;Region&lt;/A&gt; objects created by the application.&lt;BR&gt;total: Running count of regions&lt;BR&gt;&lt;B&gt;&lt;BR&gt;&lt;I&gt;Fonts Created&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.font.aspx"&gt;Font&lt;/A&gt; objects created by the application.&lt;BR&gt;total: Running count of fonts&lt;BR&gt;&lt;B&gt;&lt;BR&gt;&lt;I&gt;Graphics Created (FromImage)&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.aspx"&gt;Graphics&lt;/A&gt; objects created via the &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.fromimage.aspx"&gt;Graphics.FromImage&lt;/A&gt; method.&lt;BR&gt;total: Running total of Graphics objects created&lt;BR&gt;&lt;B&gt;&lt;BR&gt;&lt;I&gt;Graphics Created (CreateGraphics)&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.aspx"&gt;Graphics&lt;/A&gt; objects created via the &lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.creategraphics.aspx"&gt;Control.CreateGraphics&lt;/A&gt; method.&lt;BR&gt;total: Running total of Graphics objects created&lt;BR&gt;&lt;B&gt;&lt;BR&gt;Example statistics file&lt;/B&gt;&lt;BR&gt;I have highlighted the counters discussed here with a yellow background.&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last &lt;BR&gt;datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;2956837&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Created&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Classes Loaded&lt;/TD&gt;
&lt;TD align=right&gt;975&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3015&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;22&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pending Timers&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Work Items Queued&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;664&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD align=right&gt;2789048&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD align=right&gt;1366120&lt;/TD&gt;
&lt;TD align=right&gt;24&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;52&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;135796&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;5360&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;124412&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Compactions&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Code Pitchings&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pinned Objects&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Finalized&lt;/TD&gt;
&lt;TD align=right&gt;82&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD align=right&gt;3273&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Process Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;1280&lt;/TD&gt;
&lt;TD align=right&gt;7484&lt;/TD&gt;
&lt;TD align=right&gt;198308&lt;/TD&gt;
&lt;TD align=right&gt;72&lt;/TD&gt;
&lt;TD align=right&gt;330016&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Short Term Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6382&lt;/TD&gt;
&lt;TD align=right&gt;963&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;42136&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JIT Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6402&lt;/TD&gt;
&lt;TD align=right&gt;421097&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;876976&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domain Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;18679&lt;/TD&gt;
&lt;TD align=right&gt;324926&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;523240&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;30&lt;/TD&gt;
&lt;TD align=right&gt;527974&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1060864&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD align=right&gt;844928&lt;/TD&gt;
&lt;TD align=right&gt;208&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;430&lt;/TD&gt;
&lt;TD align=right&gt;84&lt;/TD&gt;
&lt;TD align=right&gt;9684&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Jitted&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD align=right&gt;367&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Controls Created&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;13&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Brushes Created&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;23&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Pens Created&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;8&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;16&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Regions Created&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Fonts Created&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;7&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;That's all of the counters!&amp;nbsp; Thanks to everyone who stuck with this series.&amp;nbsp; It was a long road and will (I hope) provide the basis for some interesting future discussions.&lt;BR&gt;&lt;BR&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=502121" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework Part VIII - Version 2 performance counters (Part VI: Exceptions, Interop and Networking  counters)</title><link>http://blogs.msdn.com/davidklinems/archive/2005/12/09/502120.aspx</link><pubDate>Fri, 09 Dec 2005 22:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:502120</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/502120.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=502120</wfw:commentRss><description>This is the sixth in the series of .NET Compact Framework v2 performance counters.&amp;nbsp; For a complete listing of the previous installments, please see the list below.&lt;BR&gt;&lt;BR&gt;Pre-requisite:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 1:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 2:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part V - Version 2 performance counters (Part III: Locks and Threads counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VI - Version 2 performance counters (Part IV: Garbage Collector counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VII - Version 2 performance counters (Part V: JIT Compiler counters)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The following table lists all of the performance counters available in version 2 of the .NET Compact Framework.&amp;nbsp; The counters highlighted, in yellow, are the ones I will be talking about today. 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Loader&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Program Run Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Unloaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Assemblies Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Classes Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Generics&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Locks and Threads&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Threads in Thread Pool&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pending Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Scheduled Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Work Items Queued&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Contested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Garbage Collector&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Peak Bytes Allocated (native + manged)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes of String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Garbage Collections (GC)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Collected By GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Compactions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Code Pitchings&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Calls to GC.Collect&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pinned Objects&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Not Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Finalized&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Boxed Vlue Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Process Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Short Term Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;JIT Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domain Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;JIT Compiler &lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Native Bytes Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Exceptions&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Exceptions Thrown&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Interop&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Platform Invoke Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;COM Calls Using a vtable&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;COM Calls Using IDispatch&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Complex Marshaling&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Runtime Callable Wrappers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Networking&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Socket Bytes Sent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Socket Bytes Received&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Windows.Forms&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Controls Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Brushes Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pens Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bitmaps Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Regions Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Fonts Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (FromImage)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.&lt;BR&gt;&lt;BR&gt;I will use the following format to describe each counter.&lt;BR&gt;&lt;I&gt;&lt;B&gt;Counter name&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;Brief description of the counter&lt;BR&gt;Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)&lt;BR&gt;Any additional comments relating to the counter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Exceptions Counters&lt;/B&gt;&lt;BR&gt;Exceptions can be expensive.&amp;nbsp; Knowing how many exceptions were thrown while your application ran is a good way to identify potential design issues.&amp;nbsp; There is one counter in the Exceptions category -- Exceptions Thrown.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Exceptions Thrown&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of managed exceptions that have been thrown.&lt;BR&gt;total: Running total of exceptions thrown&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Interop Counters&lt;/B&gt;&lt;BR&gt;Interop counters contain information regarding how an application interoperates with unmanaged (native) components (functions and COM objects).&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Platform Invoke Calls&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of calls from managed code to native code via Platform Invoke (P/Invoke).&lt;BR&gt;total: Running total of calls&lt;BR&gt;The Platform Invoke Calls counter counts P/Invoke calls made by the application and the .NET Compact Framework runtime.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;COM Calls Using a vtable&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of calls from managed code to native code via COM using the &lt;A href="http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/com/html/33f1d79a-33fc-4ce5-a372-e08bda378332.asp"&gt;IUnknown&lt;/A&gt;-derived (vtable) method. &lt;BR&gt;total: Running total of calls&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;COM Calls Using IDispatch&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of calls from managed code to native code via COM using the &lt;A href="http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/msaa/msaaovrw_0fj9.asp"&gt;IDispatch&lt;/A&gt; method. &lt;BR&gt;total: Running total calls&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Complex Marshaling&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of objects marshaled from managed code to native code that involved copying or transforming the data.&lt;BR&gt;total: Running total of objects&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Runtime Callable Wrappers&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of COM &lt;A href="http://msdn2.microsoft.com/en-us/library/8bwh56xe.aspx"&gt;Runtime Callable Wrappers&lt;/A&gt; (RCWs) that have been created.&lt;BR&gt;total: Running total of RCWs created&lt;BR&gt;Runtime Callable Wrappers are created when managed code (running on the .NET Compact Framework runtime) calls into an unmanaged (native) COM object.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Networking Counters&lt;/B&gt;&lt;BR&gt;The Networking counters provide information regarding the amount of data sent and received using Sockets.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Socket Bytes Sent&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of bytes sent by an application over one or more sockets.&lt;BR&gt;total: Running total of bytes&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Socket Bytes Received&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of bytes received by an application over one or more sockets.&lt;BR&gt;total: Running total of bytes&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Example statistics file&lt;/B&gt;&lt;BR&gt;I have highlighted the counters discussed here with a yellow background.&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last &lt;BR&gt;datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;2956837&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Created&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Classes Loaded&lt;/TD&gt;
&lt;TD align=right&gt;975&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3015&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;22&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pending Timers&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Work Items Queued&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;664&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD align=right&gt;2789048&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD align=right&gt;1366120&lt;/TD&gt;
&lt;TD align=right&gt;24&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;52&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;135796&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;5360&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;124412&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Compactions&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Code Pitchings&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pinned Objects&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Finalized&lt;/TD&gt;
&lt;TD align=right&gt;82&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD align=right&gt;3273&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Process Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;1280&lt;/TD&gt;
&lt;TD align=right&gt;7484&lt;/TD&gt;
&lt;TD align=right&gt;198308&lt;/TD&gt;
&lt;TD align=right&gt;72&lt;/TD&gt;
&lt;TD align=right&gt;330016&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Short Term Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6382&lt;/TD&gt;
&lt;TD align=right&gt;963&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;42136&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JIT Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6402&lt;/TD&gt;
&lt;TD align=right&gt;421097&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;876976&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domain Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;18679&lt;/TD&gt;
&lt;TD align=right&gt;324926&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;523240&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;30&lt;/TD&gt;
&lt;TD align=right&gt;527974&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1060864&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD align=right&gt;844928&lt;/TD&gt;
&lt;TD align=right&gt;208&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;430&lt;/TD&gt;
&lt;TD align=right&gt;84&lt;/TD&gt;
&lt;TD align=right&gt;9684&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Jitted&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;4&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;367&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controls Created&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Brushes Created&lt;/TD&gt;
&lt;TD align=right&gt;23&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pens Created&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD align=right&gt;16&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Regions Created&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Fonts Created&lt;/TD&gt;
&lt;TD align=right&gt;7&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Next time, I'll post the final installment of this series which will discuss the Windows.Forms counters.&lt;BR&gt;&lt;BR&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=502120" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework Part VII - Version 2 performance counters (Part V: JIT Compiler counters)</title><link>http://blogs.msdn.com/davidklinems/archive/2005/12/06/500638.aspx</link><pubDate>Tue, 06 Dec 2005 22:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:500638</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/500638.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=500638</wfw:commentRss><description>Today's post is the fifth in the series of .NET Compact Framework v2 performance counters.&amp;nbsp; For a complete listing of the previous installments, please see the list below.&lt;BR&gt;&lt;BR&gt;Pre-requisite:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 1:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 2:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part V - Version 2 performance counters (Part III: Locks and Threads counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part VI - Version 2 performance counters (Part IV: Garbage Collector counters)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The following table lists all of the performance counters available in version 2 of the .NET Compact Framework.&amp;nbsp; The counters highlighted, in yellow, are the ones I will be talking about today. 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Loader&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Program Run Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Unloaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Assemblies Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Classes Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Generics&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Locks and Threads&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Threads in Thread Pool&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pending Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Scheduled Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Work Items Queued&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Contested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Garbage Collector&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Peak Bytes Allocated (native + manged)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes of String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Garbage Collections (GC)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Collected By GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Compactions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Code Pitchings&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Calls to GC.Collect&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pinned Objects&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Not Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Finalized&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Boxed Vlue Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Process Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Short Term Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;JIT Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domain Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;JIT Compiler &lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Native Bytes Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Methods Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Bytes Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Methods Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Exceptions&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Exceptions Thrown&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Interop&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Platform Invoke Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using a vtable&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using IDispatch&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Complex Marshaling&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Runtime Callable Wrappers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Networking&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Sent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Received&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Windows.Forms&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Controls Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Brushes Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pens Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bitmaps Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Regions Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Fonts Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (FromImage)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.&lt;BR&gt;&lt;BR&gt;I will use the following format to describe each counter.&lt;BR&gt;&lt;I&gt;&lt;B&gt;Counter name&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;Brief description of the counter&lt;BR&gt;Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)&lt;BR&gt;Any additional comments relating to the counter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;JIT Compiler Counters&lt;/B&gt;&lt;BR&gt;The counters discussed below relate to the .NET Compact Framework's Just-In-Time (JIT) compiler.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Native Bytes Jitted&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The size (in bytes) of the native code generated by the JIT compler.&lt;BR&gt;total: Running total of the number of bytes compiledd&lt;BR&gt;last datum: Size of last compilation&lt;BR&gt;n: Number of methods compiled&lt;BR&gt;mean: Average compilation size per method&lt;BR&gt;min: Size of smallest method compilation&lt;BR&gt;max: Size of largest method compilation&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Methods Jitted&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of methods compiled by the JIT compiler.&lt;BR&gt;total: Running count of compiled methods&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Bytes Pitched&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The size (in bytes) of the JIT compiled code which has been removed from the JIT Heap.&lt;BR&gt;total: Running total of bytes pitched&lt;BR&gt;last datum: Size of last pitching&lt;BR&gt;n: Number of times code was pitched&lt;BR&gt;mean: Average number of bytes pitched&lt;BR&gt;min: The fewest number of bytes pitched&lt;BR&gt;max: The largest number of bytes pitched&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Methods Pitched&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of methods, which have been compiled by the JIT compiler, that have been removed from the JIT Heap.&lt;BR&gt;total: Running count of pitched methods&lt;BR&gt;Unless your application was moved to the background during it's runtime, any value for the Methods Pitched counter indicates the application ran under memory pressure.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Method Pitch Latency Time (ms)&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The total time (in milliseconds) spent pitching methods from the JIT Heap.&lt;BR&gt;total: Running total of the time spent pitching code&lt;BR&gt;last datum: Time spent during the most recent code pitch&lt;BR&gt;n: Number of times code was pitched&lt;BR&gt;mean: The average length of in which time a code pitch was performed&lt;BR&gt;min: The briefest amount of time spent pitching code&lt;BR&gt;max: The longest amount of time spent pitching code&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Example statistics file&lt;/B&gt;&lt;BR&gt;I have highlighted the counters discussed here with a yellow background.&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last &lt;BR&gt;datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;2956837&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Created&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Classes Loaded&lt;/TD&gt;
&lt;TD align=right&gt;975&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3015&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;22&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pending Timers&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Work Items Queued&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;664&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD align=right&gt;2789048&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD align=right&gt;1366120&lt;/TD&gt;
&lt;TD align=right&gt;24&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;52&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;135796&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;5360&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;124412&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Compactions&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Code Pitchings&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pinned Objects&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Finalized&lt;/TD&gt;
&lt;TD align=right&gt;82&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD align=right&gt;3273&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Process Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;1280&lt;/TD&gt;
&lt;TD align=right&gt;7484&lt;/TD&gt;
&lt;TD align=right&gt;198308&lt;/TD&gt;
&lt;TD align=right&gt;72&lt;/TD&gt;
&lt;TD align=right&gt;330016&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Short Term Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6382&lt;/TD&gt;
&lt;TD align=right&gt;963&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;42136&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JIT Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6402&lt;/TD&gt;
&lt;TD align=right&gt;421097&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;876976&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domain Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;18679&lt;/TD&gt;
&lt;TD align=right&gt;324926&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;523240&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;30&lt;/TD&gt;
&lt;TD align=right&gt;527974&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1060864&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;844928&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;208&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1963&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;430&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;84&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;9684&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Methods Jitted&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1963&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Methods Pitched&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD align=right&gt;367&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controls Created&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Brushes Created&lt;/TD&gt;
&lt;TD align=right&gt;23&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pens Created&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD align=right&gt;16&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Regions Created&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Fonts Created&lt;/TD&gt;
&lt;TD align=right&gt;7&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Up next: Exception, Interop and Networking counters.&lt;BR&gt;&lt;BR&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=500638" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework Part VI - Version 2 performance counters (Part IV: Garbage Collector counters)</title><link>http://blogs.msdn.com/davidklinems/archive/2005/12/01/499017.aspx</link><pubDate>Thu, 01 Dec 2005 21:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:499017</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/499017.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=499017</wfw:commentRss><description>Today's post is the fourth in the series of .NET Compact Framework v2 performance counters.&amp;nbsp; For a complete listing of the previous installments, please see the list below.&lt;BR&gt;&lt;BR&gt;Pre-requisite:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 1:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 2:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part V - Version 2 performance counters (Part III: Locks and Threads counters)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The following table lists all of the performance counters available in version 2 of the .NET Compact Framework.&amp;nbsp; The counters highlighted, in yellow, are the ones I will be talking about today. 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Loader&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Program Run Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Unloaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Assemblies Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Classes Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Generics&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Locks and Threads&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Threads in Thread Pool&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pending Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Scheduled Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Work Items Queued&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Contested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Garbage Collector&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Managed Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Managed Bytes Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Managed String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Bytes of String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Garbage Collections (GC)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Bytes Collected By GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Managed Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Total Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;GC Compactions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Code Pitchings&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Calls to GC.Collect&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;GC Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Pinned Objects&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Objects Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Objects Not Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Objects Finalized&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Boxed Value Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Process Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Short Term Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;JIT Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;App Domain Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;GC Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;JIT Compiler &lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Native Bytes Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Exceptions&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Exceptions Thrown&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Interop&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Platform Invoke Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using a vtable&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using IDispatch&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Complex Marshaling&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Runtime Callable Wrappers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Networking&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Sent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Received&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Windows.Forms&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Controls Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Brushes Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pens Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bitmaps Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Regions Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Fonts Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (FromImage)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.&lt;BR&gt;&lt;BR&gt;I will use the following format to describe each counter.&lt;BR&gt;&lt;I&gt;&lt;B&gt;Counter name&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;Brief description of the counter&lt;BR&gt;Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)&lt;BR&gt;Any additional comments relating to the counter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Garbage Collector Counters&lt;/B&gt;&lt;BR&gt;Today's counters relate to memory usage and the .NET Compact Framework Garbage Collector.&amp;nbsp; From version 1 to version 2, the Garbage Collector counters have been refined a great deal.&amp;nbsp; The version 2 counters provide significantly more detailed insight into application memory usage and make identifying memory related performance issues much easier.&lt;BR&gt;&lt;BR&gt;For information on the .NET Compact Framework Garbage Collector, please see Steven Pratschner's post: &lt;a href="http://blogs.msdn.com/stevenpr/archive/2004/07/26/197254.aspx"&gt;An Overview of the .NET Compact Framework Garbage Collector&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Peak Bytes Allocated (native + managed)&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The maximum number of bytes in use by the .NET Compact Framework including both native and managed memory.&lt;BR&gt;total: The largest number of bytes used at any time during the runtime of the application&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Managed Objects Allocated&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of all managed objects that have been allocated (including unused objects).&lt;BR&gt;total: Running total of managed objects allocated&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Managed Bytes Allocated&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of bytes allocated for managed objects.&lt;BR&gt;total: Running total of bytes allocated&lt;BR&gt;last datum: The size of the most recent allocation&lt;BR&gt;n: The number of allocations&lt;BR&gt;mean: The average size of the allocations&lt;BR&gt;min: The smallest number of bytes allocated&lt;BR&gt;max: The largest number of bytes allocated&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Managed String Objects Allocated&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of string objects that have been allocated.&lt;BR&gt;total: Running total of managed string objects&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Bytes of String Objects Allocated&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of bytes allocated for managed string objects.&lt;BR&gt;total: Running total of bytes allocated&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Garbage Collections (GC)&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of times the Garbage Collector ran during the run time of your application.&lt;BR&gt;total: Running total of collections&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Bytes Collected By GC&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of bytes collected by the Garbage Collector.&lt;BR&gt;total: Running total of bytes collected by the Garbage Collector&lt;BR&gt;last datum: The size of the most recent collection&lt;BR&gt;n: The number of collections&lt;BR&gt;mean: The average size of the collections&lt;BR&gt;min: The size of the smallest collection&lt;BR&gt;max: The size of the largest collection&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Managed Bytes In Use After GC&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of bytes allocated to live objects after the Garbage Collector has run.&lt;BR&gt;last datum: The number of managed bytes in use after the most recent collection&lt;BR&gt;n: The number of collections&lt;BR&gt;mean: The average number of bytes in use after the collections&lt;BR&gt;min: The fewest number of bytes in use after a collection&lt;BR&gt;max: The largest number of bytes in use after a collection&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Total Bytes In Use After GC&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of bytes (managed and native) in use after the Garbage Collector has run&lt;BR&gt;last datum: The number of bytes in use after the most recent collection&lt;BR&gt;n: The number of collections&lt;BR&gt;mean: The average number of bytes in use after the collections&lt;BR&gt;min: The fewest number of bytes in use after a collection&lt;BR&gt;max: The largest number of bytes in use after a collection&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;GC Compactions&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of times the Garbage Collector has compacted the heap.&lt;BR&gt;total: Running total of heap compactions by the Garbage Collector&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Code Pitchings&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of times the Garbage Collector has pitched Just-In-Time (JIT) compiled code.&lt;BR&gt;total: Running total of code pitchings&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Calls to GC.Collect&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of times the application has called the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemgcclasscollecttopic.asp"&gt;GC.Collect()&lt;/A&gt; method&lt;BR&gt;total: Running total of calls to GC.Collect()&lt;BR&gt;For a detailed discussion of the issues surrounding GC.Collect(), please see Scott Holden's post: &lt;a href="http://blogs.msdn.com/scottholden/archive/2004/12/28/339733.aspx"&gt;The perils of GC.Collect&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;GC Latency Time (ms)&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;The time (in milliseconds) that the Garbage Collector has taken to run.&lt;BR&gt;total: Running total of time spent in collection&lt;BR&gt;last datum: The time it took for the most recent collection to complete&lt;BR&gt;n: The number of garbage collections&lt;BR&gt;mean: The average time spent in collections&lt;BR&gt;min: The shortest time it took to perform a collection&lt;BR&gt;max: The longest time it took to perform a collection&lt;BR&gt;Please note that the latency time of the Garbage Collector includes collection of managed objects which are no longer in scope and the compaction (if necessary) of the GC Heap.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Pinned Objects&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of pinned objects that were encountered by the Garbage Collector.&lt;BR&gt;total: Running total of pinned objects&lt;BR&gt;Pinned objects are objects whose locations in memory cannot change.&amp;nbsp; A good example of such an object is a memory buffer that is being used to communicate between managed and unmanaged (native) code.&amp;nbsp; Pinned objects cannot be moved by the Garbage Collector during heap compaction.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Objects Moved by Compactor&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of objects that were moved by the Garbage Collector during a compaction.&lt;BR&gt;total: Running total of objects moved during compaction&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Objects Not Moved by Compactor&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of objects that cannot be moved or were not moved by the Garbage Collector during a compaction.&lt;BR&gt;total: Running total of objects not moved during compaction&lt;BR&gt;Objects might not be moved for a number of reasons.&amp;nbsp; Some objects cannot be moved (this is rare).&amp;nbsp; Other objects are not moved because they are in a portion of the heap which does not need to be compacted.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Objects Finalized&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of objects for which a finalizer has been run.&lt;BR&gt;total: Running total of finalized objects&lt;BR&gt;More information on the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemobjectclassfinalizetopic.asp"&gt;Finalize&lt;/A&gt; method can be found in the .NET Programmers Reference on MSDN.&amp;nbsp; A good discussion on implementing finalization in your objects can be found in the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconFinalizeDispose.asp"&gt;Implementing Finalize and Dispose to Clean Up Unmanaged Resources&lt;/A&gt; article (also on MSDN).&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Boxed Value Types&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of value types that have been boxed.&lt;BR&gt;total: Running total of boxed value types&lt;BR&gt;A good reference on &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfboxingconversionpg.asp"&gt;boxing of value types&lt;/A&gt; can be found in the C# Programmers Reference on MSDN.&amp;nbsp; Scott Holden also has a nice discussion on &lt;a href="http://blogs.msdn.com/scottholden/archive/2005/01/27/362084.aspx"&gt;The cost of value types in the .NET Compact Framework&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Process Heap&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of bytes in use by the .NET Compact Framework Common Language Runtime's default heap.&lt;BR&gt;last datum: The current number of bytes in the heap&lt;BR&gt;n: The number of allocations in the heap&lt;BR&gt;mean: The average number of bytes in the heap&lt;BR&gt;min: The smallest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;max: The largest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;The Process Heap contains memory allocated by the .NET Compact Framework's Common Language Runtime that does not fit into the other heaps (Short Term, JIT, App Domain, GC).&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Short Term Heap&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of bytes in use by the .NET Compact Framework Common Language Runtime's short term heap.&lt;BR&gt;last datum: The current number of bytes in the heap&lt;BR&gt;n: The number of allocations in the heap&lt;BR&gt;mean: The average number of bytes in the heap&lt;BR&gt;min: The smallest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;max: The largest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;The Short Term Heap contains memory allocated by the .NET Compact Framework Common Language Runtime for short lived (temporary) use.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;JIT Heap&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of bytes in use by the .NET Compact Framework Just-In-Time (JIT) compiler's heap.&lt;BR&gt;last datum: The current number of bytes in the heap&lt;BR&gt;n: The number of allocations in the heap&lt;BR&gt;mean: The average number of bytes in the heap&lt;BR&gt;min: The smallest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;max: The largest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;The JIT heap contains the native code generated when the .NET Compact Framework Just-In-Time compiler compiles a managed method.&amp;nbsp; JIT compilation occurs whenever a managed method is executed for the first time (or the first time a method is executed after a code pitching).&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;App Domain Heap&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of bytes in use by the .NET Compact Framework Common Language Runtime's App Domain heap.&lt;BR&gt;last datum: The current number of bytes in the heap&lt;BR&gt;n: The number of allocations in the heap&lt;BR&gt;mean: The average number of bytes in the heap&lt;BR&gt;min: The smallest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;max: The largest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;The App Domain Heap contains the dynamic representation of metadata used by the .NET Compact Framework Common Language Runtime's assembly loader.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;GC Heap&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of bytes in use by the .NET Compact Framework's Garbage Collector heap.&lt;BR&gt;last datum: The current number of bytes in the heap&lt;BR&gt;n: The number of allocations in the heap&lt;BR&gt;mean: The average number of bytes in the heap&lt;BR&gt;min: The smallest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;max: The largest number of bytes in the heap (throughout the runtime of the application)&lt;BR&gt;The GC Heap contains memory allocated by applications and the .NET Compact Framework.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Example statistics file&lt;/B&gt;&lt;BR&gt;I have highlighted the counters discussed here with a yellow background.&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last &lt;BR&gt;datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;2956837&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Created&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Classes Loaded&lt;/TD&gt;
&lt;TD align=right&gt;975&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3015&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;22&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pending Timers&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Work Items Queued&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;664&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2789048&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;25883&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1366120&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;24&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;25883&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;52&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;8&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;135796&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;5360&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;124412&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;897140&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;897140&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;897140&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;897140&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;897140&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;147292&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;147292&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;147292&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;147292&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2621848&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2621848&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2621848&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2621848&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;GC Compactions&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Code Pitchings&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;46&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;46&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;46&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;46&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;46&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Pinned Objects&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Objects Finalized&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;82&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;3273&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Process Heap&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1280&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;7484&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;198308&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;72&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;330016&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Short Term Heap&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;6382&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;963&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;42136&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;JIT Heap&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;6402&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;421097&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;876976&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;App Domain Heap&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;18679&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;324926&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;523240&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;GC Heap&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;30&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;527974&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1060864&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD align=right&gt;844928&lt;/TD&gt;
&lt;TD align=right&gt;208&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;430&lt;/TD&gt;
&lt;TD align=right&gt;84&lt;/TD&gt;
&lt;TD align=right&gt;9684&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Jitted&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD align=right&gt;367&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controls Created&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Brushes Created&lt;/TD&gt;
&lt;TD align=right&gt;23&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pens Created&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD align=right&gt;16&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Regions Created&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Fonts Created&lt;/TD&gt;
&lt;TD align=right&gt;7&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;In the next part of this series, I will talk about the .NET Compact Framework v2's JIT Compiler performance counters.&lt;BR&gt;&lt;BR&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;[Edit: post titles]&lt;BR&gt;&lt;BR&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=499017" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Three Common Causes of Memory Leaks in Managed Applications</title><link>http://blogs.msdn.com/davidklinems/archive/2005/11/16/493580.aspx</link><pubDate>Thu, 17 Nov 2005 00:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:493580</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/493580.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=493580</wfw:commentRss><description>One of the joys of working with managed code is not having to worry (as much) about memory management and letting the Garbage Collector do it's job.&amp;nbsp; There are situations, however, when applications need to take a more active role in memory management.&amp;nbsp; At MEDC 2005, I spoke, during my debugging session, about three common causes of memory leaks in managed applications: 
&lt;P&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Holding references to managed objects 
&lt;LI&gt;Failing to release unmanaged resources 
&lt;LI&gt;Failing to dispose Drawing objects&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;B&gt;Holding references to managed objects&lt;/B&gt;&lt;BR&gt;I do not actually consider the first of the three causes to be a leak in the truest sense of the term.&amp;nbsp; I say this because the memory in question is accounted for by at least one valid reference within the current scope.&amp;nbsp; While not a "true" leak, this can appear as one when looking at memory usage data.&lt;BR&gt;&lt;BR&gt;When an application holds references longer than necessary, performance counters can show a steady increase in memory consumption and may, eventually, lead to an OutOfMemoryException.&amp;nbsp; This situation can arise when variables never leave active scope.&amp;nbsp; An example of this is an application that keeps track of large amounts of data in a class global collection.&amp;nbsp; If at least one reference to a managed object remains in the current scope, the Garbage Collector cannot tell if your application is finished with the object.&amp;nbsp; Since, as far as the GC can tell, the object is still in use, it cannot be marked for collection and therefore the memory is not freed.&amp;nbsp; Since the memory is not freed the application's memory consumption continues to grow which looks very much like a memory leak.&lt;BR&gt;&lt;BR&gt;Whenever possible, I recommend minimizing the scope of an object (local rather than class global variables).&amp;nbsp; You can also let the Garbage Collector know you are finished with an object by setting your variable's value to null (Nothing in Visual Basic.NET) once you are finished using the object.&amp;nbsp; This way, the GC can collect your unused objects at its earliest convenience and your application's memory consumption can be kept to a minimum.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Failing to release unmanaged resources&lt;BR&gt;&lt;/B&gt;I mentioned, at the start of this post, that writing managed code largely frees you from needing to be concerned about memory management.&amp;nbsp; This is true when you are using only managed objects.&amp;nbsp; When you interoperate with native APIs (ex: via P/Invoke), your application needs to follow the native code memory management semantics -- loaded objects must be unloaded, allocated memory must be freed, etc.&lt;BR&gt;&lt;BR&gt;A good example is the original version of the code in my post on &lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/02/02/366042.aspx"&gt;getting the display color depth&lt;/A&gt;.&amp;nbsp; While the code worked, there was a small memory leak.&amp;nbsp; One of my readers kindly pointed out that I was forgetting to call &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_66hv.asp"&gt;ReleaseDC&lt;/A&gt; (I had previously called &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_4esj.asp"&gt;GetDC&lt;/A&gt;).&amp;nbsp; This is a fairly common mistake, and I remember telling myself to not forget the call to &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_66hv.asp"&gt;ReleaseDC&lt;/A&gt;...&amp;nbsp; While forgetting to call &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_66hv.asp"&gt;ReleaseDC&lt;/A&gt; is a relatively small leak, compared to forgetting to unload a large resource, these small leaks can build up quite rapidly.&amp;nbsp; Whenever an application consumes unmanaged resources, I highly recommend a code review with another developer.&amp;nbsp; I have found that walking someone through a block of code forces me to view it from a different angle and allows me to find these mistakes sooner.&lt;BR&gt;&lt;BR&gt;The best source of information regarding proper handing of unmanaged resources is the API documentation.&amp;nbsp; It has been my experience that the &lt;A href="http://msdn.microsoft.com/library/default.asp"&gt;MSDN documentation&lt;/A&gt; does a good job at providing cleanup information for resources requiring cleanup, typically in the remarks section of the API reference.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Failing to dispose Drawing objects&lt;/B&gt;&lt;BR&gt;A third common cause of memory leaks in managed applications is actually a manifestation of the previous cause.&amp;nbsp; When consuming &lt;A href="http://msdn2.microsoft.com/library/xs6ftd89(en-US,VS.80).aspx"&gt;System.Drawing&lt;/A&gt; and &lt;A href="http://msdn2.microsoft.com/library/ms129011(en-us,VS.80).aspx"&gt;Microsoft.WindowsMobile.DirectX.Direct3D&lt;/A&gt; objects, such as &lt;A href="http://msdn2.microsoft.com/en-us/library/system.drawing.bitmap.aspx"&gt;bitmaps&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/en-us/library/hcb9kaf8(en-US,VS.80).aspx"&gt;fonts&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/library/ms130065(en-US,VS.80).aspx"&gt;meshes&lt;/A&gt; and &lt;A href="http://msdn2.microsoft.com/library/ms130423(en-US,VS.80).aspx"&gt;textures&lt;/A&gt;, it is important to call the object's Dispose method when you no longer need the object.&amp;nbsp; This is important because, while these &lt;I&gt;&lt;B&gt;are &lt;/B&gt;&lt;/I&gt;managed objects, they contain references to unmanaged resources.&amp;nbsp; These references are cleaned up (and the memory used is freed) when the object is disposed.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Methods of disposal&lt;/B&gt;&lt;BR&gt;There are three methods for disposing of objects which require disposal.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Explicit call to the Dispose method&lt;BR&gt;Example:&lt;BR&gt;&lt;CODE&gt;playerImage-&amp;gt;Dispose();&lt;/CODE&gt; 
&lt;LI&gt;Implicit via the C# using statement&lt;BR&gt;Example: &lt;BR&gt;&lt;CODE&gt;using(SolidBrush brush = new SolidBrush(Color.Yellow))&lt;BR&gt;{ /* use the brush */ }&lt;/CODE&gt; 
&lt;LI&gt;Finalization (not recommended)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Of these three disposal methods, two of them warrant further discussion.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Implicit disposal (C# using statement)&lt;/B&gt;&lt;BR&gt;The documentation for the &lt;A href="http://msdn2.microsoft.com/en-us/library/yh598w02.aspx"&gt;using statement&lt;/A&gt; states: "You create an instance in a using statement to ensure that Dispose is called on the object when the using statement is exited."&amp;nbsp; This is a very handy way to ensure that objects requiring disposal get cleaned up properly.&amp;nbsp; One drawback to disposal via the using statement is that all use of the object needs to be contained within the using statement's code block (within the curly braces { }).&amp;nbsp; This is not a very serious drawback, however.&amp;nbsp; In my experience, I rarely have need to use objects containing unmanaged resources (ex: System.Drawing.Bitmap) for more than a few lines of code -- in an OnPaint handler, for example.&lt;BR&gt;&lt;BR&gt;If your application requires longer lived objects, explicitly calling the Dispose method when finished is the recommended approach.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Finalization (not recommended)&lt;/B&gt;&lt;BR&gt;I do not recommend relying upon finalization to dispose of object requiring disposal for two reasons.&amp;nbsp; The first reason is that the timing of finalization is not guaranteed.&amp;nbsp; Finalization is performed at the discretion of the .NET Compact Framework runtime and can occur at any time in the future.&amp;nbsp; While it is possible that finalization will occur soon after an object requiring disposal has been collected by the GC, it could also occur a significant time later.&amp;nbsp; Secondly, an object's finalizer may not actually invoke its Dispose method.&amp;nbsp; I would consider an object not calling Dispose as part of finalizationto contain a bug.&amp;nbsp; While the bug would be in the object, it is the application which will likely get the report of the memory leak.&lt;BR&gt;&lt;BR&gt;For a good discussion on implementing Dispose for your objects using unmanaged resources, please read &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconFinalizeDispose.asp"&gt;Implementing Finalize and Dispose to Clean Up Unmanaged Resources&lt;/A&gt; (on MSDN).&lt;BR&gt;&lt;BR&gt;This post has covered three common causes of memory leaks in managed applications.&amp;nbsp; If you believe your application is encountering a leak, and you have been able to rule out these causes, please let us know about the issue via the &lt;A href="http://lab.msdn.microsoft.com/productfeedback"&gt;Microsoft Product Feedback Center&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;BR&gt;&lt;BR&gt;[Edit: Cleanup: fix&amp;nbsp;typeos, etc]&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=493580" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework Part V - Version 2 performance counters (Part III: Locks and Threads counters)</title><link>http://blogs.msdn.com/davidklinems/archive/2005/11/10/491570.aspx</link><pubDate>Fri, 11 Nov 2005 01:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:491570</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/491570.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=491570</wfw:commentRss><description>This is the third part in the series describing .NET Compact Framework v2 performance counters.&amp;nbsp;&amp;nbsp; A complete listing of this series, to date, is included below.&lt;BR&gt;&lt;BR&gt;Pre-requisite:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 1:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 2:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)&lt;/A&gt;&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The following table lists all of the performance counters available in version 2 of the .NET Compact Framework.&amp;nbsp; The counters highlighted, in yellow, are the ones I will be talking about today. 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Loader&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Program Run Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Unloaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Assemblies Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Classes Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Generics&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Locks and Threads&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Threads in Thread Pool&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Pending Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Scheduled Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Work Items Queued&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Contested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Garbage Collector&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes of String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Garbage Collections (GC)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Collected By GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Compactions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Code Pitchings&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Calls to GC.Collect&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pinned Objects&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Not Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Finalized&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Boxed Value Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Process Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Short Term Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;JIT Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domain Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;JIT Compiler &lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Native Bytes Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Exceptions&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Exceptions Thrown&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Interop&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Platform Invoke Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using a vtable&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using IDispatch&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Complex Marshaling&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Runtime Callable Wrappers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Networking&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Sent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Received&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Windows.Forms&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Controls Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Brushes Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pens Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bitmaps Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Regions Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Fonts Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (FromImage)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.&lt;BR&gt;&lt;BR&gt;I will use the following format to describe each counter.&lt;BR&gt;&lt;I&gt;&lt;B&gt;Counter name&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;Brief description of the counter&lt;BR&gt;Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)&lt;BR&gt;Any additional comments relating to the counter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Locks and Threads Counters&lt;/B&gt;&lt;BR&gt;Writing well performing multi-threaded applications is one of the more challenging aspects of software development.&amp;nbsp; Along with the performance considerations of single-threaded applications (memory usage, etc), thread scheduling and data access synchronization can impact how well your application performs.&amp;nbsp; The counters described below can help identify threading related performance issues by providing data regarding thread, timer and lock usage during the run time of your application.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Threads in Thread Pool&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of threads currently in the &lt;A href="http://msdn2.microsoft.com/en-us/library/system.threading.threadpool.aspx"&gt;thread pool&lt;/A&gt;.&lt;BR&gt;last datum: The current number of threads in the thread pool&lt;BR&gt;n: The number of threads created in the thread pool&lt;BR&gt;mean: The average number of threads in the thread pool during the run time of the application&lt;BR&gt;min: The smallest number of threads in the thread pool during the run time of the application&lt;BR&gt;max: The largest number of threads in the thread pool during the run time of the application&lt;BR&gt;Please note: the Threads in Thread Pool counter does not count threads started using the &lt;A href="http://msdn2.microsoft.com/en-us/library/8c2x4zw7(en-US,VS.80).aspx"&gt;Thread.Start&lt;/A&gt; method.&amp;nbsp; Threads counted by this counter are those started via &lt;A href="http://msdn2.microsoft.com/en-us/library/b2b9a8h2(en-US,VS.80).aspx"&gt;ThreadPool.QueueUserWorkItem&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Pending Timers&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of timers currently waiting to fire.&lt;BR&gt;last datum: The current number of pending timers&lt;BR&gt;n: The number of timer events which have been queued&lt;BR&gt;mean: The average number of timers pending during the run time of the application&lt;BR&gt;min: The fewest number of timers pending during the run time of the application&lt;BR&gt;max: The largest number of timers pending during the run time of the application&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Scheduled Timers&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The number of timers that are currently running for scheduled to run.&lt;BR&gt;total: Running total of timers that have been scheduled during your application's run time&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Timers Delayed by Thread Pool Limit&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of timers that have been delayed by the thread pool limit.&lt;BR&gt;total: Running total of timers that were waiting for a thread pool thread&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Work Items Queued&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;The count of items queued to the thread pool.&lt;BR&gt;total: Running total of all managed work items that have been &lt;A href="http://msdn2.microsoft.com/en-us/library/b2b9a8h2(en-US,VS.80).aspx"&gt;queued&lt;/A&gt; to the thread pool.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Uncontested Monitor.Enter Calls&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;Count of calls made to &lt;A href="http://msdn2.microsoft.com/en-us/library/system.threading.monitor.enter.aspx"&gt;Monitor.Enter&lt;/A&gt; that are not contested.&lt;BR&gt;total: Running total of uncontested calls to Monitor.Enter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;I&gt;Contested Monitor.Enter Calls&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;Count of calls made to &lt;A href="http://msdn2.microsoft.com/en-us/library/system.threading.monitor.enter.aspx"&gt;Monitor.Enter&lt;/A&gt; with lock contention.&lt;BR&gt;total: Running total of contested calls to Monitor.Enter&lt;BR&gt;In multi-threaded applications, if Thread1 is holding a lock and Thread2 needs to access code that is guarded by the lock (currently held by Thread1) the Contested Monitor.Enter Calls counter is incremented.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Example statistics file&lt;/B&gt;&lt;BR&gt;I have highlighted the counters discussed here with a yellow background.&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last &lt;BR&gt;datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;2956837&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Created&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Classes Loaded&lt;/TD&gt;
&lt;TD align=right&gt;975&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3015&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;22&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Pending Timers&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;4&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Work Items Queued&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;664&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD align=right&gt;2789048&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD align=right&gt;1366120&lt;/TD&gt;
&lt;TD align=right&gt;24&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;52&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;135796&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;5360&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;124412&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Compactions&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Code Pitchings&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pinned Objects&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Finalized&lt;/TD&gt;
&lt;TD align=right&gt;82&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD align=right&gt;3273&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Process Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;1280&lt;/TD&gt;
&lt;TD align=right&gt;7484&lt;/TD&gt;
&lt;TD align=right&gt;198308&lt;/TD&gt;
&lt;TD align=right&gt;72&lt;/TD&gt;
&lt;TD align=right&gt;330016&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Short Term Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6382&lt;/TD&gt;
&lt;TD align=right&gt;963&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;42136&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JIT Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6402&lt;/TD&gt;
&lt;TD align=right&gt;421097&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;876976&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domain Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;18679&lt;/TD&gt;
&lt;TD align=right&gt;324926&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;523240&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;30&lt;/TD&gt;
&lt;TD align=right&gt;527974&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1060864&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD align=right&gt;844928&lt;/TD&gt;
&lt;TD align=right&gt;208&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;430&lt;/TD&gt;
&lt;TD align=right&gt;84&lt;/TD&gt;
&lt;TD align=right&gt;9684&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Jitted&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD align=right&gt;367&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controls Created&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Brushes Created&lt;/TD&gt;
&lt;TD align=right&gt;23&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pens Created&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD align=right&gt;16&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Regions Created&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Fonts Created&lt;/TD&gt;
&lt;TD align=right&gt;7&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;[Edit: update counter table to fix errors]&lt;BR&gt;[Edit: post titles]&lt;BR&gt;&lt;BR&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=491570" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework Part IV - Version 2 performance counters (Part II: Generics counters)</title><link>http://blogs.msdn.com/davidklinems/archive/2005/10/25/484868.aspx</link><pubDate>Wed, 26 Oct 2005 00:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:484868</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/484868.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=484868</wfw:commentRss><description>In the &lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;previous installment&lt;/A&gt;, I discussed the .NET Compact Framework performance counters related to the loader.&amp;nbsp; Today, I'd like to talk about the counters related to the new Generic feature of the .NET Compact Framework version 2.&lt;BR&gt;&lt;BR&gt;This is the second part of the series describing .NET Compact Framwork v2 performance counters.&amp;nbsp;&amp;nbsp; A complete listing of this series, to date, is included below.&lt;BR&gt;&lt;BR&gt;Pre-requisite:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part I - Enabling performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 1:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part II - Version 1 performance counters&lt;/A&gt;&lt;BR&gt;.NET Compact Framework Version 2:&lt;BR&gt;&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;In each new installment, I will add to this list, to make referring back easier.&amp;nbsp; I have also listed the earlier posts of the parent series on monitoring application performance.&lt;BR&gt;&lt;BR&gt;The following table lists all of the performance counters available in version 2 of the .NET Compact Framework.&amp;nbsp; The counters highlighted, in yellow, are the ones I will be talking about today. 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table3 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Loader&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Program Run Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domains Unloaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Assemblies Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Classes Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Generics&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Closed Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Closed Types Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Open Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Closed Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Closed Methods Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Open Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Locks and Threads&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Threads in Thread Pool&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pending Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Scheduled Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Work Items Queued&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Contested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Garbage Collector&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes of String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Garbage Collections (GC)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Collected By GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Compactions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Code Pitchings&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Calls to GC.Collect&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pinned Objects&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Not Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Finalized&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Boxed Value Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Process Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Short Term Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;JIT Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domain Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;JIT Compiler &lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Native Bytes Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Exceptions&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Exceptions Thrown&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Interop&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Platform Invoke Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using a vtable&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using IDispatch&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Complex Marshaling&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Runtime Callable Wrappers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Networking&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Sent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Received&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Windows.Forms&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Controls Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Brushes Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pens Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bitmaps Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Regions Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Fonts Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (FromImage)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.&lt;BR&gt;&lt;BR&gt;I will use the following format to describe each counter.&lt;BR&gt;&lt;I&gt;&lt;B&gt;Counter name&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;Brief description of the counter&lt;BR&gt;Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)&lt;BR&gt;Any additional comments relating to the counter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Generics Counters&lt;/B&gt;&lt;BR&gt;The generics counters are loader counters that are specific to the generics feature of the .NET Compact Framework version 2.&amp;nbsp; Since the runtime internally uses generics, you may see values in these counters even if your application does not use generics explicitly.&amp;nbsp; For an excellent discussion of generics and the .NET Compact Framework, please see &lt;a href="http://blogs.msdn.com/romanbat/archive/2005/01/06/348114.aspx"&gt;Generics in the .NET Compact Framework&lt;/A&gt; by &lt;a href="http://blogs.msdn.com/romanbat"&gt;Roman Batoukov&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Closed Types Loaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The count of unique generic types that have been created across all &lt;A href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemAppDomainClassTopic.asp"&gt;App Domains&lt;/A&gt;.&lt;BR&gt;total: Running total of created generic types&lt;BR&gt;A closed type is a generic class that has been bound with a specific data type.&amp;nbsp; For example, an instance of &lt;CODE&gt;MyGenericType&amp;lt;Int32&amp;gt;&lt;/CODE&gt; is a closed type.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Closed Types Loaded per Definition&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The maximum number of unique generic types created for a given definition across all App Domains.&lt;BR&gt;total: Running total of created generic types (will match the total in the Closed Types Loaded counter)&lt;BR&gt;last datum: The number of unique generic types created for the most recent definition&lt;BR&gt;n: The number of generic type definitions&lt;BR&gt;mean: The average number of unique generic types created for a definition&lt;BR&gt;min: The smallest number of unique generic types created for a definition&lt;BR&gt;max: The largest number of unique generic types created for a definition&lt;BR&gt;For example, if an application instantiates &lt;CODE&gt;MyGenericType&amp;lt;Int32&amp;gt;&lt;/CODE&gt;, &lt;CODE&gt;MyGenericType&amp;lt;String&amp;gt;&lt;/CODE&gt; and &lt;CODE&gt;MyGenericType&amp;lt;Single&amp;gt;&lt;/CODE&gt;, the number of closed types loaded for the &lt;CODE&gt;MyGenericType&amp;lt;T&amp;gt;&lt;/CODE&gt; definition is three (3).&lt;BR&gt;When looking at the Closed Types Loaded per Definition counter, the most interesting value is in the max column.&amp;nbsp; If this number is large (on the order of several hundred), this can indicate working set pressure in terms of JIT compiled code and Execution Engine data structures.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Open Types Loaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The count of open generic types create across all App Domains.&lt;BR&gt;total: Running total of generic types created which have not been bound&lt;BR&gt;Open types are typically created in Reflection scenarios.&amp;nbsp; An open type is a generic type that has been loaded, but not bound to a specific type.&amp;nbsp; For example, loading an instance of &lt;CODE&gt;MyGenericType&amp;lt;T&amp;gt;&lt;/CODE&gt; via reflection will increment the Open Types Loaded counter, once the type has been bound (ex: &lt;CODE&gt;MyGenericType&amp;lt;String&amp;gt;&lt;/CODE&gt;) it becomes a closed type and the Closed Types Loaded counter is incremented.&amp;nbsp; It is good to note that the .NET Compact Framework runtime at times (ex: XmlSerialization, Web Services) will use reflection internally and can be the source of the open types.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Closed Methods Loaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The count of unique generic methods that have been loaded across all App Domains.&lt;BR&gt;total: Running total of created generic methods&lt;BR&gt;A closed method is a generic method that has been bound with a specific data type.&amp;nbsp; The type containing the method may or may not be a generic type.&amp;nbsp; For example, an instance of &lt;CODE&gt;MyType.ProcessData&amp;lt;Int32&amp;gt;()&lt;/CODE&gt; is a closed method.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Closed Methods Loaded per Definition&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The maximum number of unique generic methods created for a given definition across all App Domains.&lt;BR&gt;total: Running total of created generic methods (will match the total in the Closed Methods Loaded counter)&lt;BR&gt;last datum: The number of unique generic methods created for the most recent definition&lt;BR&gt;n: The number of generic method definitions&lt;BR&gt;mean: The average number of unique generic methods created for a definition&lt;BR&gt;min: The smallest number of unique generic methods created for a definition&lt;BR&gt;max: The largest number of unique generic methods created for a definition&lt;BR&gt;The Closed Methods Loaded per Definition counter is very similar to Closed Types Loaded per Definition.&amp;nbsp; Using the following instances of &lt;CODE&gt;MyType.ProcessData&amp;lt;Int32&amp;gt;()&lt;/CODE&gt;, &lt;CODE&gt;MyType.ProcessData&amp;lt;String&amp;gt;()&lt;/CODE&gt; and &lt;CODE&gt;MyType.ProcessData&amp;lt;Single&amp;gt;()&lt;/CODE&gt; will create three (3) closed methods for the &lt;CODE&gt;MyType.ProcessData&amp;lt;T&amp;gt;()&lt;/CODE&gt; definition.&lt;BR&gt;As with the Closed Types Loaded per Definition counter, in large (on the order of several hundred) max value scenarios, this can indicate working set pressure in terms of JIT compiled code and Execution Engine data structures.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Open Methods Loaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The count of open generic methods created across all App Domains.&lt;BR&gt;total: Running total of generic methods created which have not been bound&lt;BR&gt;Open methods are typically created in Reflection scenarios.&amp;nbsp; An open type is a generic method that has been loaded, but not bound to a specific type.&amp;nbsp; For example, loading an instance of &lt;CODE&gt;MyType.ProcessData&amp;lt;T&amp;gt;()&lt;/CODE&gt; via reflection will increment the Open Types Loaded counter, once the method has been bound (ex: &lt;CODE&gt;MyType.ProcessData&amp;lt;Int32&amp;gt;()&lt;/CODE&gt;) it becomes a closed method and the Closed Methods Loaded counter is also incremented.&amp;nbsp; It is good to note that the .NET Compact Framework runtime uses reflection internally and can be the source of the open methods.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Example statistics file&lt;/B&gt;&lt;BR&gt;The following is the same example statistics file from &lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx"&gt;last time&lt;/A&gt;, showing the data collected by running a simple application.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;As with the counters table, I have highlighted the counters discussed here with a yellow background.&lt;/P&gt;
&lt;TABLE id=table4 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last &lt;BR&gt;datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;2956837&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Created&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Classes Loaded&lt;/TD&gt;
&lt;TD align=right&gt;975&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3015&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;75&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;75&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;3&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;22&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;3&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;13&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;3&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;3&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;3&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;0&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pending Timers&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Work Items Queued&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;664&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD align=right&gt;2789048&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD align=right&gt;1366120&lt;/TD&gt;
&lt;TD align=right&gt;24&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;52&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;135796&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;5360&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;124412&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Compactions&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Code Pitchings&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pinned Objects&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Finalized&lt;/TD&gt;
&lt;TD align=right&gt;82&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD align=right&gt;3273&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Process Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;1280&lt;/TD&gt;
&lt;TD align=right&gt;7484&lt;/TD&gt;
&lt;TD align=right&gt;198308&lt;/TD&gt;
&lt;TD align=right&gt;72&lt;/TD&gt;
&lt;TD align=right&gt;330016&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Short Term Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6382&lt;/TD&gt;
&lt;TD align=right&gt;963&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;42136&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JIT Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6402&lt;/TD&gt;
&lt;TD align=right&gt;421097&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;876976&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domain Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;18679&lt;/TD&gt;
&lt;TD align=right&gt;324926&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;523240&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;30&lt;/TD&gt;
&lt;TD align=right&gt;527974&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1060864&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD align=right&gt;844928&lt;/TD&gt;
&lt;TD align=right&gt;208&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;430&lt;/TD&gt;
&lt;TD align=right&gt;84&lt;/TD&gt;
&lt;TD align=right&gt;9684&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Jitted&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD align=right&gt;367&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controls Created&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Brushes Created&lt;/TD&gt;
&lt;TD align=right&gt;23&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pens Created&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD align=right&gt;16&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Regions Created&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Fonts Created&lt;/TD&gt;
&lt;TD align=right&gt;7&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;[Edit: update counter table to fix errors]&lt;BR&gt;[Edit: post titles]&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=484868" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Monitoring Application Performance on the .NET Compact Framework Part III - Version 2 performance counters (Part I: Loader counters)</title><link>http://blogs.msdn.com/davidklinems/archive/2005/10/18/482309.aspx</link><pubDate>Tue, 18 Oct 2005 20:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:482309</guid><dc:creator>DavidKlineMS</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/davidklinems/comments/482309.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidklinems/commentrss.aspx?PostID=482309</wfw:commentRss><description>&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;Last time&lt;/A&gt;, I talked about the performance counters available in version 1 of the .NET Compact Framework.&amp;nbsp; Today, I'd like to talk about a few of the performance counters available in version 2 of the .NET Compact Framework.&lt;BR&gt;&lt;BR&gt;As I mentioned in part 1 (&lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/04/476988.aspx"&gt;Enabling performance counters&lt;/A&gt;), the data collected is written to a file in the device's root folder when the application exits.&amp;nbsp; In version 1 of the .NET Compact Framework, this file was called &lt;CODE&gt;mscoree.stat&lt;/CODE&gt;.&amp;nbsp; In version 2, the .NET Compact Framework the file's name is derived from your application (ex: &lt;CODE&gt;WebCrawler.stat&lt;/CODE&gt;).&lt;BR&gt;&lt;BR&gt;The following table lists all of the performance counters available in version 2 of the .NET Compact Framework. 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE id=table1 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" bgColor=#ffff99 colSpan=2&gt;&lt;B&gt;Loader&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Total Program Run Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;App Domains Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;App Domains Unloaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Assemblies Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Classes Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%" bgColor=#ffff99&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%" bgColor=#ffff99&gt;Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Generics&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Types Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Types Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Closed Methods Loaded per Definition&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Open Methods Loaded&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Locks and Threads&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Threads in Thread Pool&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pending Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Scheduled Timers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Work Items Queued&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Contested Monitor.Enter Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Garbage Collector&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes of String Objects Allocated&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Garbage Collections (GC)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Collected By GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Managed Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Total Bytes In Use After GC&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Compactions&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Code Pitchings&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Calls to GC.Collect&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pinned Objects&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Not Moved by Compactor&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Objects Finalized&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Boxed Value Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Process Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Short Term Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;JIT Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;App Domain Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;GC Heap&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;JIT Compiler &lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Native Bytes Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Jitted&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bytes Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Methods Pitched&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Exceptions&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Exceptions Thrown&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Interop&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Platform Invoke Calls&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using a vtable&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;COM Calls Using IDispatch&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Complex Marshaling&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Runtime Callable Wrappers&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Networking&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Sent&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Socket Bytes Received&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="100%" colSpan=2&gt;&lt;B&gt;Windows.Forms&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Controls Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Brushes Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Pens Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Bitmaps Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Regions Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Fonts Created&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (FromImage)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="1%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="99%"&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;As you can see in the above table, there are quite a few performance counters available in version 2 of the .NET Compact Framework.&amp;nbsp; Compared to version 1, the counters are more detailed, provide greater insight on the operation of the runtime and allow for a better understanding of application performance issues.&lt;BR&gt;&lt;BR&gt;Considering the length of the &lt;a href="http://blogs.msdn.com/davidklinems/archive/2005/10/10/479445.aspx"&gt;previous post&lt;/A&gt; and the increased number of performance counters available in version 2, I will be discussing the new counters by their categories.&amp;nbsp; With each new installment, I will re-post the above table, along with an example file, and highlight the counters being discussed by setting the background color to yellow.&lt;BR&gt;&lt;BR&gt;The statistics file includes running totals, the most recent value (last datum), count (n), average (mean), minimum and maximum values for the counters. I've included an example file at the end of this post. For counters where a given column is not relevant, a hyphen (-) is logged.&lt;BR&gt;&lt;BR&gt;I will use the following format to describe each counter.&lt;BR&gt;&lt;I&gt;&lt;B&gt;Counter name&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;Brief description of the counter&lt;BR&gt;Discussion of the contents of relevant columns (total, last datum, n, mean, min, max)&lt;BR&gt;Any additional comments relating to the counter&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Loader Counters&lt;/B&gt;&lt;BR&gt;The first category of counters that I will cover are related to the loader.&amp;nbsp; The loader is the portion of the runtime which is responsible for resolving and loading the components (assemblies, classes, etc) referenced by your application.&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Total Program Run Time (ms)&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The length of time your application ran (from the start of the Common Language Runtime).&lt;BR&gt;total: Time in milliseconds&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;App Domains Created&lt;BR&gt;&lt;/B&gt;&lt;/I&gt;The number of &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemAppDomainClassTopic.asp"&gt;App Domains&lt;/A&gt; created in the application's process.&lt;BR&gt;total: Running total of created App Domains&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;App Domains Unloaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The number of &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemAppDomainClassTopic.asp"&gt;App Domains&lt;/A&gt; that were unloaded during the run time of the application.&lt;BR&gt;total: Running total of unloaded App Domains&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Assemblies Loaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The number of assemblies loaded (across all App Domains) on behalf of the application.&lt;BR&gt;total: Running total of loaded assemblies&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Classes Loaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The number of classes loaded (across all App Domains) during the run time of the application.&lt;BR&gt;total: Running total of loaded classes&lt;BR&gt;&lt;BR&gt;&lt;I&gt;&lt;B&gt;Methods Loaded&lt;/B&gt;&lt;/I&gt;&lt;BR&gt;The total number of methods loaded (across all App Domains) during the run time of the application.&lt;BR&gt;total: Running total of loaded methods&lt;BR&gt;&lt;BR&gt;If you are comparing the version 1 and version 2 counters, you may have noticed that version 2 no longer collects the Execution Engine Startup Time.&amp;nbsp; Since applications cannot impact the Execution Engine's startup time, the counter is not relevant to application writers and was removed from version 2 of the .NET Compact Framework.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Example statistics file&lt;/B&gt;&lt;BR&gt;The following is an example statistics file (formerly known as &lt;CODE&gt;mscoree.stat&lt;/CODE&gt;) that shows the data collected by running a simple application.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;As with the counters table, above, I have highlighted the counters discussed here with a yellow background.&amp;nbsp; As this series continues, I will re-use this same example file and highlight the counters discussed in each post.&lt;/P&gt;
&lt;TABLE id=table2 cellSpacing=0 width="50%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;counter&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;total&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;last &lt;BR&gt;datum&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;n&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;mean&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;min&lt;/B&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;B&gt;max&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Total Program Run Time (ms)&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;2956837&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;App Domains Created&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;App Domains Unloaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;1&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Assemblies Loaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;8&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Classes Loaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;975&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#ffff99&gt;Methods Loaded&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;3015&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;
&lt;TD align=right bgColor=#ffff99&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Types Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;75&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;22&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Types Loaded&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Closed Methods Loaded per Definition&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;3&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Open Methods Loaded&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Threads in Thread Pool&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pending Timers&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Scheduled Timers&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Timers Delayed by Thread Pool Limit&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Work Items Queued&lt;/TD&gt;
&lt;TD align=right&gt;2&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Uncontested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;664&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Contested Monitor.Enter Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Peak Bytes Allocated (native + managed)&lt;/TD&gt;
&lt;TD align=right&gt;2789048&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes Allocated&lt;/TD&gt;
&lt;TD align=right&gt;1366120&lt;/TD&gt;
&lt;TD align=right&gt;24&lt;/TD&gt;
&lt;TD align=right&gt;25883&lt;/TD&gt;
&lt;TD align=right&gt;52&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;135796&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;5360&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes of String Objects Allocated&lt;/TD&gt;
&lt;TD align=right&gt;124412&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Garbage Collections (GC)&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Collected By GC&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;
&lt;TD align=right&gt;897140&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Managed Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;
&lt;TD align=right&gt;147292&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Total Bytes In Use After GC&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;
&lt;TD align=right&gt;2621848&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Compactions&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Code Pitchings&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Calls to GC.Collect&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;1&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;
&lt;TD align=right&gt;46&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pinned Objects&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Not Moved by Compactor&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Objects Finalized&lt;/TD&gt;
&lt;TD align=right&gt;82&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Boxed Value Types&lt;/TD&gt;
&lt;TD align=right&gt;3273&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Process Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;1280&lt;/TD&gt;
&lt;TD align=right&gt;7484&lt;/TD&gt;
&lt;TD align=right&gt;198308&lt;/TD&gt;
&lt;TD align=right&gt;72&lt;/TD&gt;
&lt;TD align=right&gt;330016&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Short Term Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6382&lt;/TD&gt;
&lt;TD align=right&gt;963&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;42136&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;JIT Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;6402&lt;/TD&gt;
&lt;TD align=right&gt;421097&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;876976&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;App Domain Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;18679&lt;/TD&gt;
&lt;TD align=right&gt;324926&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;523240&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GC Heap&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;30&lt;/TD&gt;
&lt;TD align=right&gt;527974&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;1060864&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Native Bytes Jitted&lt;/TD&gt;
&lt;TD align=right&gt;844928&lt;/TD&gt;
&lt;TD align=right&gt;208&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;430&lt;/TD&gt;
&lt;TD align=right&gt;84&lt;/TD&gt;
&lt;TD align=right&gt;9684&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Jitted&lt;/TD&gt;
&lt;TD align=right&gt;1963&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bytes Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Methods Pitched&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Method Pitch Latency Time (ms)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Exceptions Thrown&lt;/TD&gt;
&lt;TD align=right&gt;4&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Platform Invoke Calls&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using a vtable&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;COM Calls Using IDispatch&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Complex Marshaling&lt;/TD&gt;
&lt;TD align=right&gt;367&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Runtime Callable Wrappers&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Sent&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Socket Bytes Received&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Controls Created&lt;/TD&gt;
&lt;TD align=right&gt;13&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Brushes Created&lt;/TD&gt;
&lt;TD align=right&gt;23&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Pens Created&lt;/TD&gt;
&lt;TD align=right&gt;8&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Bitmaps Created&lt;/TD&gt;
&lt;TD align=right&gt;16&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Regions Created&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Fonts Created&lt;/TD&gt;
&lt;TD align=right&gt;7&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (FromImage)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Graphics Created (CreateGraphics)&lt;/TD&gt;
&lt;TD align=right&gt;0&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;
&lt;TD align=right&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Take care,&lt;BR&gt;-- DK&lt;BR&gt;&lt;BR&gt;&lt;FONT size=1&gt;[Edit: update counter table to fix errors]&lt;BR&gt;[Edit: post title]&lt;BR&gt;&lt;BR&gt;Disclaimer(s):&lt;BR&gt;This posting is provided "AS IS" with no warranties, and confers no rights.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=482309" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/davidklinems/archive/tags/Performance/default.aspx">Performance</category></item></channel></rss>