<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Jose Reyes's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/josere/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/josere/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:23:23 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>ASP.NET Internals – Managed runtime loader</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/asp-net-internals-managed-runtime-loader</link>
      <pubDate>Wed, 29 Feb 2012 13:14:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2012/02/29/asp-net-internals-managed-runtime-loader/</guid>
      <description><![CDATA[Introduction
There is a file called aspnet.config in the .Net framework installation. This file...]]></description>
      <content:encoded><![CDATA[<div class="WordSection1">
<h2><span style="font-variant: normal !important;">Introduction</span></h2>
<p class="MsoNormal">There is a file called aspnet.config in the .Net framework installation. This file is used to specify startup flags for both ASP.NET and CLR for those settings that are needed very early in the worker process lifetime, when the config system is not yet present.</p>
<p class="MsoNormal">In IIS 7.5 we added an attribute to the &lt;applicationPools&gt; configuration collection&nbsp;called CLRConfigFile, on the applicationHost.config file,&nbsp;which allows you to specify your own aspnet.config, for a particular application pool.</p>
<p class="MsoNormal">There is another attribute on the &lt;applicationPools&gt; called managedRuntimeLoader, which specify the library in charge of loading CLR. By default, this task is executed by ASP.NET native layer, in the webengine4.dll. If no loader is specified, or if an error occurs, the loading falls back to IIS itself.</p>
<h2><span style="font-variant: normal !important;">IIS 7.5 issue.</span></h2>
<p class="MsoNormal">There was a problem in IIS 7.5, in which the managedRuntimeLoader was never provided with the path to this CLRConfigFile, so it was forced to use the one in the framework directory. So if you wanted to use the CLRConfigFile, to setup different CLR flags for an application pool, you will need to set the attribute AND explicitly clear the managedRuntimeLoader attribute on the application pool <a href="https://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add">definition</a> on applicationHost.config:</p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp; ...</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">system.applicationHost</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp; ...</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">applicationPools</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--</span><span style="color: green; font-family: Consolas; font-size: 9.5pt;"> Set the CLRConfigFile and clear managedRuntimeLoader </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">--&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">add</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: red; font-family: Consolas; font-size: 9.5pt;">name</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">=</span><span style="font-family: Consolas; font-size: 9.5pt;">"<span style="color: blue;">MyAppPool</span>"<span style="color: blue;"> </span><span style="color: red;">CLRConfigFile</span><span style="color: blue;">=</span>"<span style="color: blue;">c:\myconfigs\myapp1\aspnet.config</span>"<span style="color: blue;"> </span><span style="color: red;">managedRuntimeLoader</span><span style="color: blue;">=</span>""<span style="color: blue;"> /&gt;</span></span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp; ...</span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">The second step shouldn&rsquo;t be necessary and is confusing. The clearing of the attributes basically forces the fall back to IIS runtime loader, which uses the correct CLRConfigFile.</p>
<p class="MsoNormal">This has been fixed on IIS 8, where you only need to set the CLRConfigFile attribute.</p>
<p class="MsoNormal">To verify this is working, you can change one parameter on the aspnet.config such as disabling the server garbage collector. <em>(Note: Disabling the server garbage collector is a good thing if you want to save memory, at the expense of throughput. Typical use of this is hosting scenarios, where web sites has low traffic and higher site density is desirable.)</em></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">configuration</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">runtime</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp; ...</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">gcServer</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: red; font-family: Consolas; font-size: 9.5pt;">enabled</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">=</span><span style="font-family: Consolas; font-size: 9.5pt;">"<span style="color: blue;">false</span>"<span style="color: blue;">/&gt;</span></span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">Attaching a debugger to the worker process and using SOS command !eeversion will show the garbage collector mode being used:</p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">C:\&gt;cdb.exe -pn w3wp.exe</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">&nbsp;</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">Microsoft (R) Windows Debugger Version 6.13.0009.1140 X86</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">Copyright (c) Microsoft Corporation. All rights reserved.</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">&nbsp; &hellip;</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">0:044&gt; .loadby sos clr</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">0:044&gt; !eeversion</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">4.0.30319.239 retail</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="background: yellow; line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">Workstation mode</span></p>
<p style="margin-bottom: 0pt;" class="MsoNormal"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">SOS Version: 4.0.30319.239 retail build</span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">Make sure your box has more than one logical core; otherwise workstation mode will always be used.</p>
<h2><span style="font-variant: normal !important;">Implementing a loader</span></h2>
Implementing a loader is probably not needed, but if you want to do it, you will need a native DLL&nbsp;that exports a function named <span style="font-family: Consolas; font-size: 9.5pt;">LoadManagedRuntime</span>. In IIS 8 you can also export LoadManagedRuntimeEx. The function signature is shown below:
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">HRESULT <span style="color: blue;">__stdcall</span></span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">LoadManagedRuntime(</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _In_ PCWSTR pwszRuntimeVersion,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="es-code">__deref_out</span><span style="font-family: Consolas; font-size: 9.5pt;"> IUnknown ** ppManagedRuntimeHost)</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">{</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> LoadRuntimeInternal(pwszRuntimeVersion, ppManagedRuntimeHost);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">}</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">HRESULT <span style="color: blue;">__stdcall</span></span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">LoadManagedRuntimeEx(</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _In_ PCWSTR pwszRuntimeVersion,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _In_ PCWSTR pszClrConfigFile,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="es-code">__deref_out</span><span style="font-family: Consolas; font-size: 9.5pt;"> IUnknown ** ppManagedRuntimeHost)</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">{</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> LoadRuntimeInternal(pwszRuntimeVersion, ppManagedRuntimeHost, pszClrConfigFile);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">}</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">HRESULT LoadRuntimeInternal(_In_ PCWSTR pwszRuntimeVersion, __deref_out IUnknown** ppHost <span style="color: green;">/*= NULL*/</span>, _In_ PCWSTR pwszAspNetHostConfig <span style="color: green;">/*= NULL*/</span>) {</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; HMODULE hModule = NULL;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; HRESULT hr = S_OK;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; IUnknown *pHost = NULL;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; PFNCorBindToRuntimeHost pCorBindToRuntimeHost;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; TCHAR szPath[MAX_PATH + 1];</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; TCHAR szAspConfig[MAX_PATH + 1];</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; ExpandEnvironmentStrings(L<span style="color: #a31515;">"%windir%\\system32\\mscoree.dll"</span>, szPath, MAX_PATH);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span>(pwszAspNetHostConfig == NULL) {</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExpandEnvironmentStrings(ASPNET_CONFIG, szAspConfig, MAX_PATH);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pwszAspNetHostConfig = szAspConfig;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; hModule = LoadLibrary(szPath);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; ON_NULL_EXIT(hModule);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; pCorBindToRuntimeHost = (PFNCorBindToRuntimeHost)GetProcAddress(hModule, <span style="color: #a31515;">"CorBindToRuntimeHost"</span>);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; ON_NULL_EXIT(pCorBindToRuntimeHost);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; hr = pCorBindToRuntimeHost(</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L<span style="color: #a31515;">"v4.0.30319"</span>,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L<span style="color: #a31515;">"svr"</span>,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pwszAspNetHostConfig,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, <span style="color: green;">// reserved</span></span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STARTUP_CONCURRENT_GC|STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOST|STARTUP_LOADER_SAFEMODE|STARTUP_DISABLE_COMMITTHREADSTACK|STARTUP_HOARD_GC_VM,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLSID_CLRRuntimeHost,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IID_IUnknown,</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VOID**)&amp;pHost);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">Cleanup:</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (pHost != NULL &amp;&amp; ppHost != NULL) {</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pHost-&gt;AddRef();</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *ppHost = pHost;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span>(hModule != NULL) {</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FreeLibrary(hModule);</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">return</span> hr;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">}</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
See the attached project for the full sample code. The sample can be compiled into a native DLL and the managedRuntimeLoader attribute can be set to point to that DLL.
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp; ...</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">system.applicationHost</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp; ...</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">applicationPools</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--</span><span style="color: green; font-family: Consolas; font-size: 9.5pt;"> Set the CLRConfigFile and managedRuntimeLoader </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">--&gt;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">add</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: red; font-family: Consolas; font-size: 9.5pt;">name</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">=</span><span style="font-family: Consolas; font-size: 9.5pt;">"<span style="color: blue;">MyAppPool</span>"<span style="color: blue;"> </span><span style="color: red;">CLRConfigFile</span><span style="color: blue;">=</span>"<span style="color: blue;">c:\myconfigs\myapp1\aspnet.config</span>"<span style="color: blue;"> </span><span style="color: red;">managedRuntimeLoader</span><span style="color: blue;">=</span>"<span style="color: blue;">c:\mynativedlls\myruntimeloader.dll</span>"<span style="color: blue;"> /&gt;</span></span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp; ...</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left"><span style="font-family: Consolas; font-size: 9.5pt;">&nbsp;</span></p>
<p style="text-align: left; line-height: normal; margin-bottom: 0pt;" class="MsoNormal" align="left">Note that debugging such a code on IIS will require the use of <a href="https://blogs.msdn.com/b/junfeng/archive/2004/04/28/121871.aspx">&ldquo;Image File Execution Options&rdquo;</a>, since the code is executed very early on the worker process lifecycle. An easier way to test might be to load the library yourself and call the functions, the way IIS would (see the test project).</p>
<h2><span style="font-variant: normal !important;">Conclusion</span></h2>
<p class="MsoNormal">IIS 7.5 required for you to clean the managedRuntimeLoader attribute, if you wanted to change CLR parameters on your own CLRConfigFile.</p>
<p class="MsoNormal">Implementation of a managed runtime loader requires a native DLL which exports a <span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;">LoadManagedRuntime() and/or LoadManagedRuntimeEx().</span></p>
<p class="MsoNormal">Thanks for reading.</p>
</div>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/27/48/70/managedRuntimeLoader.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-27-48-70/managedRuntimeLoader.zip">managedRuntimeLoader.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>ASP.NET Internals – Prefetch and Multi-Core Jitting.</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/asp-net-internals-prefetch-and-multi-core-jitting</link>
      <pubDate>Wed, 29 Feb 2012 13:07:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2012/02/29/asp-net-internals-prefetch-and-multi-core-jitting/</guid>
      <description><![CDATA[Introduction.
A couple of new features are introduced in ASP.NET 4.5 to improve startup time of...]]></description>
      <content:encoded><![CDATA[<div class="WordSection1">
<h2><span style="font-variant: normal !important;">Introduction.</span></h2>
<p class="MsoNormal">A couple of new features are introduced in ASP.NET 4.5 to improve startup time of web apps. Both features use a flag on the web.config to enable them. The features don&rsquo;t do any magic by themself. They just enable features available on the operating system underneath or in the CLR APIs.</p>
<h2><span style="font-variant: normal !important;">Prefetch feature</span></h2>
<p class="MsoNormal">The prefetch feature only works on Windows 8 Server or newer OS. It requires the Os to be configured and the enablePrefetchOptimization flag on the &lt;system.web/compilation&gt; section of web.config to be set. The flag only has effect at the app level. No subdirectory config or location tag makes sense here. The setting is set to false by default, so users must explicitly set it to true in order for it to work.</p>
<p class="MsoNormal">To enable the feature, run the Enable-MMAgent power shell command:</p>
<p class="MsoNormal"><span style="font-family: Consolas; color: #595959;">&nbsp;&nbsp;&nbsp; powershell Enable-MMAgent -OperationAPI</span></p>
<p class="MsoNormal">The SuperFetch service might need to be started. Verify is running:</p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">C:\&gt;sc query sysmain</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">SERVICE_NAME: sysmain</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 20&nbsp; WIN32_SHARE_PROCESS</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 4&nbsp; <span style="background: yellow;">RUNNING</span></span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WIN32_EXIT_CODE&nbsp;&nbsp;&nbsp; : 0&nbsp; (0x0)</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SERVICE_EXIT_CODE&nbsp; : 0&nbsp; (0x0)</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHECKPOINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x0</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WAIT_HINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0x0</span></p>
<h2><span style="font-variant: normal !important;">Prefetch Implementation.</span></h2>
<p class="MsoNormal">The features simple uses the operation recorder API. See <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/hh437562(v=vs.85).aspx">OperationStart</a> and <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/hh437558(v=vs.85).aspx">OperationEnd</a> APIs on msdn. This APIs require an integer used as an Id of the operation. We use a hash code of the app domain app id, which is a string.</p>
<p style="margin-bottom: .0001pt; text-align: left; line-height: normal; text-autospace: none;" class="MsoNormal" align="left"><span style="font-size: 9.5pt; font-family: Consolas; color: blue;">string</span><span style="font-size: 9.5pt; font-family: Consolas;"> domainId = <span style="color: #2b91af;">HttpRuntime</span>.AppDomainAppId;</span></p>
<p style="margin-bottom: .0001pt; text-align: left; line-height: normal; text-autospace: none;" class="MsoNormal" align="left"><span style="font-size: 9.5pt; font-family: Consolas; color: blue;">int</span><span style="font-size: 9.5pt; font-family: Consolas;"> operationId = domainId.GetHashCode(); </span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">The OperationStart call is made the first time the app domain is created. The OperationEnd API is called at the end of the request in which we called OperationStart. A .pf file should be created on the prefetch directory:</p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">C:\&gt;dir %windir%\Prefetch</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;Volume in drive C has no label.</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;Volume Serial Number is CC5B-113C</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;Directory of C:\Windows\Prefetch</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">02/16/2012&nbsp; 04:17 PM&nbsp;&nbsp;&nbsp; &lt;DIR&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">02/16/2012&nbsp; 04:17 PM&nbsp;&nbsp;&nbsp; &lt;DIR&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">02/16/2012&nbsp; 04:17 PM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 164,832 <span style="background: yellow;">Op-W3WP.EXE-90E54C33-765F360E.pf</span></span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 File(s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 164,832 bytes</span></p>
<p style="margin-bottom: .0001pt;" class="MsoNormal"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 Dir(s)&nbsp; 30,203,154,432 bytes free</span></p>
<h2><span style="font-variant: normal !important;">Multi-Core Jitting feature.</span></h2>
<p class="MsoNormal">The multi-core jitting feature is enabled by default, and work on all OS where ASP.NET 4.5 is available. You can disable it by setting the profileGuidedOptimizations enumerated value on the &lt;system.web/compilation&gt; section on the web.config, to <i><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">None</span></i>.</p>
<h2><span style="font-variant: normal !important;">Multi-Core Jitting Implementation.</span></h2>
<p class="MsoNormal">The feature uses the new class <a href="https://msdn.microsoft.com/en-us/library/system.runtime.profileoptimization(v=VS.110).aspx">ProfileOptimization</a> class of the System.Runtime namespace. The class is called the first time the app domain is created. First, we set the <a href="https://msdn.microsoft.com/en-us/library/system.runtime.profileoptimization.setprofileroot(v=vs.110).aspx">profile</a> root to the codegen directory, which by default is something like:</p>
<p class="MsoNormal">"%windir%\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\<b>myapp</b>\weirdhash1\weirdhash2"</p>
<p class="MsoNormal">Remember that the temporary files folder value can be changed on tempDirectory attribute of the &lt;system.web/compilation&gt; section of the web.config.</p>
<p class="MsoNormal">After setting the profile root, we call <a href="https://msdn.microsoft.com/en-us/library/system.runtime.profileoptimization.startprofile(v=vs.110).aspx">StartProfile</a>() with the filename "profileoptimization.prof". The CLR code underneath handles all the magic. If you examine the contents of the temporary ASP.NET file folder, you will see the file there:</p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\dotnetnuke\59a60e53\a2ac2624&gt;dir *.prof</span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;Volume in drive C has no label.</span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;Volume Serial Number is CC5B-113C</span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;</span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;Directory of C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\dotnetnuke\59a60e53\a2ac2624</span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;</span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">02/16/2012&nbsp; 04:38 PM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9,828 <span style="background: yellow;">profileoptimization.prof</span></span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 File(s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9,828 bytes</span></p>
<p style="margin-bottom: .0001pt; text-align: left;" class="MsoNormal" align="left"><span style="font-size: 9.0pt; line-height: 115%; font-family: 'Courier New';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 Dir(s)&nbsp; 30,203,035,648 bytes free&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<h2><span style="font-variant: normal !important;">Conclusion.</span></h2>
<p class="MsoNormal">The ASP.NET Prefetch feature uses the operation recording APIs to improve startup time of web applications. The feature is enabled when a Windows Server 8 machine is configured for the operation API and enabledPrefetchOptimization flag is set on the web.config.</p>
<p class="MsoNormal">The multi-core jitting feature is available&nbsp;in more&nbsp;operating systems&nbsp;and is on by default. It uses a new CLR feature for profile base optimization.</p>
<p class="MsoNormal">Thanks for reading.</p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Performance Improvements for ASP.NET Shared Hosting Scenarios in .Net 4.5</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/performance-improvements-for-asp-net-shared-hosting-scenarios-in-net-4-5</link>
      <pubDate>Tue, 13 Sep 2011 15:04:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2011/09/13/performance-improvements-for-asp-net-shared-hosting-scenarios-in-net-4-5/</guid>
      <description><![CDATA[Disclaimer: The article below discusses pre-release features and performance numbers. Some of these...]]></description>
      <content:encoded><![CDATA[<p><i>Disclaimer: The article below discusses pre-release features and performance numbers. Some of these features could change on the RTM version. Also, the actual performance numbers could change from now until we ship.</i></p>
<p>During .Net 4.5 development we tried to improve the performance of ASP.NET in shared hosting scenarios, where many web sites might share the same machine. In such environment traffic is usually low. In this case startup time becomes very important. That is the time it takes a web site to receive a first request and respond to it, when the worker process was down, and the web site was already compiled, which is the most common case. Also assuming that other worker processes are running other web sites, so shared components will be already loaded.</p>
<p>Another important metric is the site density. The more sites we can fit in a box the lower the cost for the hosters. The site metric we used was the unshared working set. That is the total working set minus the shared working set.</p>
<h2>Scenarios.</h2>
<p>The first thing we needed to validate our work was a set of scenarios that could allow us to measure our progress, through this two metrics: Startup and Site Density. We decided to use community created and used web applications. We gathered a bunch of applications deployed by the Web Platform Installer (Web PI).</p>
<p>We focused on three applications: DotNetNuke, Blogengine and IBuySpy+*. The decision was based on our planned work, which included features that will deal with assemblies in the Bin folder. So we picked three apps that have different levels of Bin folder use. DotNetNuke has heavy use of assemblies in the Bin folder, Blogengine has some use and IBuySpy+ has none.</p>
<h2>Startup</h2>
<p>We added several features during this product cycle to improve startup time. These features are the results of the work of several teams at Microsoft, including CLR and Windows Server. ASP.NET team worked on enabling these features in our product. The feature list is below:</p>
<ol>
<li>Prefetch.</li>
<li>Bin assemblies interning.</li>
<li>Multi-core JIT.</li>
</ol>
<h2>Memory.</h2>
<p>The features implemented to aid the memory site were:</p>
<ol>
<li>HighDensityWebHosting performance scenario.</li>
<li>Bin assemblies interning.</li>
</ol>
<h2>Numbers.</h2>
<p>Baseline: Windows 2008 R2, .Net 4.0</p>
<p>Results: Windows 8 Server,&nbsp; .Net 4.5</p>
<table style="width: 527px; height: 363px;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p align="left"><span style="text-decoration: underline;">App Name</span></p>
</td>
<td>
<p align="left"><span style="text-decoration: underline;">Metric</span></p>
</td>
<td>
<p align="left"><span style="text-decoration: underline;">Unit</span></p>
</td>
<td>
<p align="right"><span style="text-decoration: underline;">Baseline</span></p>
</td>
<td>
<p align="right"><span style="text-decoration: underline;">Result</span></p>
</td>
<td>
<p align="right"><span style="text-decoration: underline;">Diff</span></p>
</td>
</tr>
<tr>
<td>
<p align="left">blogengine</p>
</td>
<td>
<p align="left">Unshared Working Set</p>
</td>
<td>
<p align="left">KB</p>
</td>
<td>
<p align="right">17,212.67</p>
</td>
<td>
<p align="right">12,985.33</p>
</td>
<td>
<p align="right">24.56%</p>
</td>
</tr>
<tr>
<td>
<p align="left">dotnetnuke</p>
</td>
<td>
<p align="left">Unshared Working Set</p>
</td>
<td>
<p align="left">KB</p>
</td>
<td>
<p align="right">27,383.33</p>
</td>
<td>
<p align="right">16,743.33</p>
</td>
<td>
<p align="right">38.86%</p>
</td>
</tr>
<tr>
<td>
<p align="left">ibuyspyplus</p>
</td>
<td>
<p align="left">Unshared Working Set</p>
</td>
<td>
<p align="left">KB</p>
</td>
<td>
<p align="right">17,299.33</p>
</td>
<td>
<p align="right">13,744.67</p>
</td>
<td>
<p align="right">20.55%</p>
</td>
</tr>
<tr>
<td>
<p align="left">blogengine</p>
</td>
<td>
<p align="left">Colds Startup Time</p>
</td>
<td>
<p align="left">secs</p>
</td>
<td>
<p align="right">1.63</p>
</td>
<td>
<p align="right">1.09</p>
</td>
<td>
<p align="right">33.05%</p>
</td>
</tr>
<tr>
<td>
<p align="left">dotnetnuke</p>
</td>
<td>
<p align="left">Colds Startup Time</p>
</td>
<td>
<p align="left">secs</p>
</td>
<td>
<p align="right">2.58</p>
</td>
<td>
<p align="right">1.71</p>
</td>
<td>
<p align="right">33.53%</p>
</td>
</tr>
<tr>
<td>
<p align="left">ibuyspyplus</p>
</td>
<td>
<p align="left">Colds Startup Time</p>
</td>
<td>
<p align="left">secs</p>
</td>
<td>
<p align="right">1.52</p>
</td>
<td>
<p align="right">1.06</p>
</td>
<td>
<p align="right">30.27%</p>
</td>
</tr>
</tbody>
</table>
<p></p>
<p>Hardware used:</p>
<p align="left">&nbsp; &lt;Machine&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp; &lt;Hardware&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Processor Num="2"&gt;Intel(R) Xeon(R) CPU 5160 @ 3.00GHz&lt;/Processor&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Memory&gt;4096&lt;/Memory&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;HardDrives Num="2"&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;HardDrive&gt;HP DF146ABAA9 SCSI Disk Device SCSI[136.73 GB]&lt;/HardDrive&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;HardDrive&gt;SEAGATE ST3300656SS SCSI Disk Device SCSI[279.39 GB]&lt;/HardDrive&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/HardDrives&gt;</p>
<p align="left">&nbsp;&nbsp;&nbsp; &lt;/Hardware&gt;</p>
<p align="left">&nbsp; &lt;/Machine&gt;</p>
<p></p>
<p>Other resources for the features implemented:</p>
<p><span style="line-height: 115%; font-family: 'Calibri','sans-serif'; font-size: 10pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"><a href="https://www.asp.net/vnext/whats-new#_Toc_perf">https://www.asp.net/vnext/whats-new#_Toc_perf</a></span></p>
<h3>&nbsp;</h3>
<p>*IBuySpy+ is a variation of the IBuySpy (a web app we use extensively on the ASP.NET perf team), which added some of the new features of ASP.NET/.Net framework added during the v3.5 timeframe.</p>]]></content:encoded>
    </item>
    <item>
      <title>CPU Throttling for ASP.NET Asynchronous Scenarios in .Net 4.5</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/cpu-throttling-for-asp-net-asynchronous-scenarios-in-net-4-5</link>
      <pubDate>Tue, 13 Sep 2011 15:01:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2011/09/13/cpu-throttling-for-asp-net-asynchronous-scenarios-in-net-4-5/</guid>
      <description><![CDATA[Disclaimer: The article below discusses pre-release features. Some of these features could change on...]]></description>
      <content:encoded><![CDATA[<p><i>Disclaimer: The article below discusses pre-release features. Some of these features could change on the RTM version.</i></p>
<h2>The scenario</h2>
<p>The sample scenario we considered here is the hypothetical page in which we need to aggregate the results of five remote feeds, in a second tier. Requesting the feeds has a latency, which we set to 100ms in our test. Requesting this asynchronously have a clear advantage, since five request will take around 100ms. If we requested them synchronously, in sequence, it will take 500ms. The figure below shows the scenario:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/37/00/4336.cpu_throttling_scenario.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-00/4336.cpu_5F00_throttling_5F00_scenario.gif"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/37/00/4336.cpu_throttling_scenario.gif" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-00/4336.cpu_5F00_throttling_5F00_scenario.gif" /></a></p>
<h2>The problem</h2>
<p>Asynchronous request in ASP.Net 4.0 has some scalability issues when a huge load (beyond the hardware capabilities) is put on such scenario. The problem is due to the nature of allocation on asynchronous scenarios. In these conditions, allocation will happen when the asynchronous operation starts, and it will consumed when it completes. By that time, it&rsquo;s very possible the objects have been moved to generation 1 or 2 by the garbage collector.</p>
<p>When this happens, increasing the load will show increase on request per second (rps) until a point. Once we pass that point, the time spend in the garbage collector will start to become a problem and the rps will start to dip, having a negative scaling effect. The figure below shows the effect of increasing the load in our particular scenario. The pick is achieved in the sample data with 770 clients.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/37/00/5148.cpu_throttling_rps_vs_client.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-00/5148.cpu_5F00_throttling_5F00_rps_5F00_vs_5F00_client.gif"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/37/00/5148.cpu_throttling_rps_vs_client.gif" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-00/5148.cpu_5F00_throttling_5F00_rps_5F00_vs_5F00_client.gif" /></a></p>
<h2>CPU throttling</h2>
<p>To try to fix this problem, we implemented a throttling mechanism in 4.5. Simply, when the CPU usage went beyond a point, requests were sent to the ASP.NET native queue. This queue already existed, for IIS integrated pipeline mode only, and is used also to limit concurrency based on the parameters maxConcurrentRequestsPerCPU and maxConcurrentThreadsPerCPU in aspnet.config (or through registry keys).</p>
<p>We added an additional setting in aspnet.config for the percentage of CPU usage we will monitor to start the throttling. The new setting is called percentCpuLimit. So whenever the CPU usage goes beyond that point, we will start sending some of the request to the queue, effectively reducing the concurrency and the amount of managed buffers that get allocated and collected by the GC. This improved considerably the scalability of this type of scenarios in our tests.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/37/00/2548.cpu_throttling_rps_vs_client_with_throttling.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-00/2548.cpu_5F00_throttling_5F00_rps_5F00_vs_5F00_client_5F00_with_5F00_throttling.gif"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/37/00/2548.cpu_throttling_rps_vs_client_with_throttling.gif" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-37-00/2548.cpu_5F00_throttling_5F00_rps_5F00_vs_5F00_client_5F00_with_5F00_throttling.gif" /></a></p>
<p>The default value of the setting is 99%. To disable the throttling, set percentCpuLimit to 0:</p>
<p align="left"><span style="color: blue;">&lt;</span><span style="color: #a31515;">configuration</span><span style="color: blue;">&gt;</span></p>
<p align="left">&nbsp;&nbsp;&nbsp; <span style="color: green;">&lt;!-- ... --&gt;</span></p>
<p align="left">&nbsp;&nbsp;&nbsp; <span style="color: blue;">&lt;</span><span style="color: #a31515;">system.web</span><span style="color: blue;">&gt;</span></p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue;">&lt;</span><span style="color: #a31515;">applicationPool </span><span style="color: red;">percentCpuLimit</span><span style="color: blue;">="0"/&gt;</span></p>
<p align="left">&nbsp;&nbsp;&nbsp; <span style="color: blue;">&lt;/</span><span style="color: #a31515;">system.web</span><span style="color: blue;">&gt;</span></p>
<p align="left"><span style="color: blue;">&lt;/</span><span style="color: #a31515;">configuration</span><span style="color: blue;">&gt;</span></p>
<h2>Performance counters</h2>
<p>In order to know if throttling is happening, the existing &ldquo;ASP.NET\Requests Queued&rdquo; counter can&rsquo;t be used. The counter includes the requests waiting for a CLR thread pool thread and the requests in the ASP.NET queue. So we added the counter below:</p>
<table style="width: 544px; height: 119px;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="217">
<p>Counter</p>
</td>
<td valign="top" width="373">
<p>Purpose</p>
</td>
</tr>
<tr>
<td valign="top" width="217">
<p>&ldquo;ASP.NET\Requests In Native Queue&rdquo;</p>
</td>
<td valign="top" width="373">
<p>Requests queued in ASP.NET because the concurrency limits have been exceeded.</p>
</td>
</tr>
</tbody>
</table>
<p></p>
<p>Note the new counter will also include requests queued for any other concurrency limiting setting. That is maxConcurrentRequestsPerCPU and maxConcurrentThreadsPerCPU. The checks are made in that order, then percentCpuLimit is checked.</p>
<h2>New defaults</h2>
<p>There are a few settings that affect this type of scenarios. Some of them in the framework, some of them in IIS/http.sys. We review them and tried to change the default values of some of them, so they work better out of the box.</p>
<p>System.Net.ServicePointManager.DefaultConnectionLimit: This setting controls how many concurrent outbound connections you can start with System.Net classes, such as HttpWebRequest. The setting can also be set in machine.config setting &lt;system.net/connectionManagement/add[@address='*'] maxconnection /&gt;, as long as &lt;processModel autoConfig=false /&gt;. In .Net 4.0 we used to set this parameter to 12 times the number of logical CPUs, when autoConfig=true. We have changed that in 4.5 to Infinite (actually is int32.MaxValue).</p>
<p>requestQueueLimit: This setting can be set in &lt;processModel requestQueueLimit /&gt; on machine.config or in &lt;system.web/applicationPool requestQueueLimit /&gt; in aspnet.config. The setting used to work on 4.0 and below as a fix setting, meaning that once we reach that many total requests (5000 by default) we started to return 503 status code. We fixed this in ASP.NET 4.5 to return 503 when the number of&nbsp;requests on the ASP.NET queue is bigger than this value, rather than using the total number of requests.</p>
<p>Http.sys queueLength: &lt;system.applicationHost/applicationPools/applicationPoolDefaults.queueLength /&gt; parameter can be used in IIS to set this. The default in IIS 7.5 is 1000. This can sometimes not be sufficient on a managed application with heavy garbage collection. This is cause by some GC threads using higher priority threads, which can make the IIS threads processing the queue to starve for CPU. However, the setting affects non-paged memory. The default value was not changed. If your web site returns 503 status code, you can try increasing this value.</p>
<p>System.Data MaxPoolSize: The number of database connection on the pool can also affect the scalability of these types of scenarios. The value can be set inside the connection string. The value to choose depends primarily by the Sql server, rather than the client machine, so the default was not changed in 4.5.</p>
<h2>Summary</h2>
<p>To review, a new concurrency setting was added in 4.5 in aspnet.config named percentCpuLimit, to alleviate async scenarios scalability. A new performance counter named &ldquo;ASP.NET\Requests In Native Queue&rdquo; was also added, to know when the throttling is happening. And some default values were changed for some .Net settings. All this is only valid for IIS integrated pipeline mode.</p>]]></content:encoded>
    </item>
    <item>
      <title>“ASP.NETRequests Queued” bug in IIS integrated Mode.</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/asp-netrequests-queued-bug-in-iis-integrated-mode</link>
      <pubDate>Fri, 15 Oct 2010 18:02:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2010/10/15/asp-netrequests-queued-bug-in-iis-integrated-mode/</guid>
      <description><![CDATA[Introduction.
There was a bug in ASP.Net 2.0 in which the &ldquo;ASP.NET\Requests Queued&rdquo;...]]></description>
      <content:encoded><![CDATA[<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Calibri;">Introduction.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">There was a bug in ASP.Net 2.0 in which the &ldquo;ASP.NET\Requests Queued&rdquo; performance counter only reported values when a request was queued in the ASP.Net Queue. It didn&rsquo;t count the requests that were waiting for the CLR thread pool. This was only in IIS7+ integrated mode and was different than the behavior in classic mode.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The problem is fixed now in ASP.Net 4.0, so if you were monitoring the counter before, you might start seeing values and worry about the performance of your application, when this behavior is expected. A patch for 2.0 was also released in </span><a href="https://code.msdn.microsoft.com/KB979917"><span style="font-family: Calibri; color: #0000ff; font-size: small;">KB979917</span></a><span style="font-size: small;"><span style="font-family: Calibri;">. The problem was discovered by the SharePoint team who uses the counter to monitor the health of their sites. Also, updates released after this KB should contain the fix.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Calibri;">More Details.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">Request for ASP.Net are always delivered first in the context of an IIS thread. At that point, ASP.Net queues a work item to the CLR thread pool and returns, so IIS can use this thread to process another request. Once the CLR thread pool decides to activate this work item, the request continues on the context of a CLR worker thread. It could take some time until the thread pool activates the requests, so these acts as a queue of request. Next, we monitor if we have too many concurrent request, and might decide to put the request in the ASP.Net queue<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">This behavior is very similar in both classic and integrated mode. The main difference is that in integrated mode there is a single queue for the whole app pool, while classic mode has a queue in each app domain. Also different is the settings used to configure those queues. None of these details are relevant to this discussion. </span><a href="https://blogs.msdn.com/b/tmarq/"><span style="font-family: Calibri; font-size: small;">Tmarq</span></a><span style="font-size: small;"><span style="font-family: Calibri;"> has blogged about this. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">The point is that &ldquo;Requests Queued&rdquo; needs to be incremented just before queuing the work item to the CLR thread pool and decremented just after the work item started to run in the worker thread. If the request is then stored in the ASP.NET queue, the counter needs to be incremented once more, and decremented when it is finally removed from the queue and scheduled to be executed. This was done that way in classic mode, but in integrated mode we were only doing the second increment/decrement. <o:p></o:p></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="font-size: small;"><span style="font-family: Calibri;">In conclusion:<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">The immediate effect of the bug was that the same application, under the same load, could show values on the counter in classic mode, but showed zero if moved to integrated mode. This is now fixed. On the other hand, customers that always used integrated mode might start to see values in this counter when moving to 4.0 (or applying the patch for 2.0) and be concerned, trying to find a performance issue that doesn&rsquo;t exist. This is the main reason of this article. Hopefully, our customers will find it helpful.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">
<p class="MsoNormal"><b><span lang="EN" style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;"><span style="font-family: Calibri;">Additional Resources<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span lang="EN" style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;"><span style="font-family: Calibri;"><span lang="EN" style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;"><span style="font-family: Calibri;">Other performance related articles: <a href="https://blogs.msdn.com/josere"><span style="color: #0066dd;">https://blogs.msdn.com/josere</span></a> &nbsp;</span></span></span></span></p>
<o:p></o:p></span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>ASP.NET Internals - Performance counters implementation details</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/asp-net-internals-performance-counters-implementation-details</link>
      <pubDate>Fri, 18 Jun 2010 12:16:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2010/06/18/asp-net-internals-performance-counters-implementation-details/</guid>
      <description><![CDATA[Introduction
Many users seem to run into issues when using ASP.NET Performance counters. With that...]]></description>
      <content:encoded><![CDATA[<p class="MsoNormal"><b><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Introduction</span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Many users seem to run into issues when using ASP.NET Performance counters. With that in mind, I decided to write this article to explain, in as much detail as possible, how the ASP.NET Performance counters were implemented. In the hope people will find this useful when dealing with such problems. This might be also useful for support engineers helping customers.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The basis.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The first thing to know is how counters were implemented in the Os at the time of ASP.NET performance counters initial coding. This is explained in great detail in the </span></span><a href="https://msdn.microsoft.com/en-us/library/aa373083(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">msdn web site</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">. Don&rsquo;t worry. You don&rsquo;t need to read all that documentation to understand the basis of how this works.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Basically, what you need, in order to provide performance counters, is a native dll with at least three exports: </span></span><a href="https://msdn.microsoft.com/en-us/library/aa372200(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Open</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">, </span></span><a href="https://msdn.microsoft.com/en-us/library/aa371895(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">Close</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> and </span></span><a href="https://msdn.microsoft.com/en-us/library/aa371898(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">Collect</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">. You also need an .ini file with the counters names and descriptions, and an .h file with the indexes. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">You also need a registry key under HKLM\SYSTEM\CurrentControlSet\services\&lt;your_app&gt;\Performance. This key should contain the &ldquo;Library&rdquo;, &ldquo;Open&rdquo;, &ldquo;Close&rdquo; and &ldquo;Collect&rdquo; values with your native dll and its exports.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Once this is ready, you can call </span></span><a href="https://msdn.microsoft.com/en-us/library/ms894317.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">lodctr.exe</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> (or </span></span><a href="https://msdn.microsoft.com/en-us/library/aa372187.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">LoadPerfCounterTextStrings</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">() from your code) passing the .ini file path as a parameter. This will register the performance counters. The call will populate some other registry values on the registry key mentioned before. The performance counters names are stored at HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\nnn, where nnn is the language id. You can use </span></span><a href="https://msdn.microsoft.com/en-us/library/ms929082.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">unlodctr.exe</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> (or </span></span><a href="https://msdn.microsoft.com/en-us/library/aa373205(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">UnloadPerfCounterTextStrings</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">()) to unregister. Errors during this process are usually stored in the event log.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Versioned versus Generic<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET Performance counters has generic categories (e.g. ASP.NET and ASP.NET Applications) and versioned categories (e.g. ASP.NET v2.50727 and ASP.NET Apps v2.50727). This allows side-by-side versions with different performance counters implementation. The higher version registered on the machine &ldquo;owns&rdquo; the generic objects, while all versions &ldquo;owns&rdquo; their respective versioned objects. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Note that if you have an ASP.NET application running in a lower version, then the generic counters will not report numbers for that application. You need to use the versioned categories in that case. For instance, if you have both 2.0 and 4.0 registered in the same machine, and a web application is running in an application pool using 2.0, then the ASP.NET and ASP.NET Application categories will not report data for that app. You need to use ASP.NET v2.50727 and ASP.NET Apps v2.50727 categories instead.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Global versus Instance-based.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET has some counters that are global. That means that they are aggregated for all web apps running in that version of ASP.NET. These counters are reported thru the ASP.NET category (or ASP.NET vx.xxxxx).<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Instance based counters can be obtained for a particular app. These counters are accessible with the ASP.NET Applications category (or ASP.NET Apps vx.xxxxx, for versioned). The instance name is the app domain id of the app. When hosted in IIS, this ID is made with the &ldquo;metabase&rdquo; path (e.g. _LM_W3SVC_1_ROOT_MYAPP). When running in Visual Studio, the ID is a hex integer, created with a hash code of a combination of virtual and physical path of the app.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET performance counters files.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">In the case of ASP.NET 2.0, the native library providing performance counters is called aspnet_perf.dll and it resides in the framework directory (e.g. C:\Windows\Microsoft.NET\Framework64\v2.0.50727). This library implements the exports for the generic performance counters (e.g. ASP.NET), the versioned performance counters (e.g. ASP.NET_2.0.50727) and the aspnet_state service performance counters. Older versions had the export methods directly on the aspnet_isapi.dll.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">In 4.0 we added a new library called aspnet_counters.dll. This library resides in the System32 directory (e.g. c:\Windows\System32 and c:\Windows\SysWOW64). It replaced aspnet_perf.dll in the registration, but it&rsquo;s actually a shim, which redirects all calls to aspnet_perf.dll. The later still is the one doing all the work.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The problem with the previous registration design was that a full path was required in the &ldquo;Library&rdquo; value in both the versioned and the generic keys. This created several problems. First, you needed separated registry keys for 64 bit and 32 bit. Also, in Windows 2003, the performance counters will sometimes stop working when using Windows Management Instrumentation (WMI). Additionally, 32 bit clients (e.g. mmc.exe /32 perfmon.msc) couldn&rsquo;t access performance counters for the session state service.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Other files used by performance counters in the framework directory are the followings: The aspnet_perf2.ini file is used for generic counters, while aspnet_perf.ini is used to register the versioned counters. They share the same aspnet_perf.h. The state service files are aspnet_state_perf.ini and aspnet_state_perf.h.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET performance counters registry keys.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET has multiple registry keys under HKLM\SYSTEM\CurrentControlSet\services. The list below shows all the keys and their use:<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpFirst"><span style="font-family: Symbol; color: #333333; font-size: 12pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">&middot;<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="font-family: Calibri;">ASP.NET: Registry key for the generic counters. When 2.0 is the highest version registered, this will contain the registration for 32 bit clients. In 4.0 this key is always platform agnostic, so both 64 and 32 clients can use this entry.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="font-family: Symbol; color: #333333; font-size: 12pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: EN;" lang="EN"><span style="mso-list: Ignore;">&middot;<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;">ASP.NET_64: Registry key for the generic counters on 64 bit Os. When 2.0 is the highest version registered, this will contain the registration for 64 bit clients. In 4.0 and above, this key will be deleted by the registration process.</span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="font-family: Symbol; color: #333333; font-size: 12pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: EN;" lang="EN"><span style="mso-list: Ignore;">&middot;<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET_2.0.50727: Registry key for the 2.0 versioned counters. It contains the registration for 32 bit clients.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="font-family: Symbol; color: #333333; font-size: 12pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: EN;" lang="EN"><span style="mso-list: Ignore;">&middot;<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET_64_2.0.50727: Registry key for the 2.0 versioned counters. It contains the registration for 64 bit clients.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="font-family: Symbol; color: #333333; font-size: 12pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: EN;" lang="EN"><span style="mso-list: Ignore;">&middot;<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ASP.NET_4.0.30319: Registry key for the 4.0 versioned counters. The key is platform agnostic. It will work with any client, regardless of its bitness.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="font-family: Symbol; color: #333333; font-size: 12pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: EN;" lang="EN"><span style="mso-list: Ignore;">&middot;<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">aspnet_state: Contains registration for session state performance counters. In 64 bit Os, only 64 bit library will be present.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpLast"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><o:p><span style="font-family: Calibri;">&nbsp;</span></o:p></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Each key also contains sub-keys. Their use is described below:<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpFirst"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">a)</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="font-family: Calibri;">Performance: Sub-key with &ldquo;Library&rdquo; and exports. Other values are set by the Os.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">b)</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="font-family: Calibri;">Names: Pipe names. One per each running worker process. See &ldquo;What happens at runtime?&rdquo;. This sub-key appears only on the 32 bit versioned keys.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">c)</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="font-family: Calibri;">Linkage: In 4.0 and above we store here the referenced version number of the ASP.NET registered, in a value called &ldquo;Export&rdquo;. This sub-key was not present or used in ASP.NET 2.0.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">d)</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><span style="font-family: Calibri;">Parameters: Not related to performance counters. Only on the session state service.<o:p></o:p></span></span></p>
<p class="MsoListParagraphCxSpLast"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"><o:p><span style="font-family: Calibri;">&nbsp;</span></o:p></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The registration process.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The registration of the performance counters is executed from within aspnet_regiis.exe tool. Registration happens with switches -i, -iru, -ir or -update (&ldquo;undocumented&rdquo;). During framework setup this tool is actually called as a custom action by the installation framework. The parameter used during setup is -iru. Note that starting with Vista, since the .Net framework is part of the Os, the performance counters can also be registered during package installation (e.g. pkgmgr /iu:IIS-WebServerRole;&hellip;;IIS-ASPNET). This is done by a tool called aspnetca.exe, in the IIS folder (e.g. %windir%\System32\inetsrv), which does a job similar to that of aspnet_regiis.exe.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">To register the generic counters, aspnet_regiis.exe first calls </span></span><a href="https://msdn.microsoft.com/en-us/library/aa373205(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">UnloadPerfCounterTextStrings</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">() with &ldquo;ASP.NET&rdquo; as parameter. This ensures we always have a clean registration. Additionally, in 4.0 and newer, we also unregister the &ldquo;ASP.NET_64&rdquo; driver and remove the associated registry key. Then aspnet_regiis.exe calls </span></span><a href="https://msdn.microsoft.com/en-us/library/aa372187.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">LoadPerfCounterTextStrings</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">() passing the file&nbsp;path to aspnet_perf2.ini as parameter. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">For versioned counters, we also unregister first (via </span></span><a href="https://msdn.microsoft.com/en-us/library/aa373205(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">UnloadPerfCounterTextStrings</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">()) and then register with aspnet_perf.ini as parameter. This is done every time you call aspnet_regiis.exe with any registration switch.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The state service counters are a little bit different. They are only registered together with the service, so once this is registered, the performance counters are not unreg/reg again in subsequent calls to aspnet_regiis.exe. Also, under a 64 bit Os, the counters are not registered if you run the 32 bit version (wow64 process) of aspnet_regiis.exe.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">When unregistering, aspnet_regiis.exe has to make sure the next available registered version of ASP.NET takes ownership of the generic counters. So after we call </span></span><a href="https://msdn.microsoft.com/en-us/library/aa373205(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">UnloadPerfCounterTextStrings</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">() for the generic counters, we search the registry trying to find another version of ASP.NET in the HKLM\SOFTWARE\Microsoft\ASP.NET registry. If one is found, we call </span></span><a href="https://msdn.microsoft.com/en-us/library/aa372187.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">LoadPerfCounterTextStrings</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">() with that version&rsquo;s aspnet_perf2.ini. For instance, if both 2.0 and 4.0 are registered, then, calling aspnet_regiis.exe -u from the 4.0, would actually associate the 2.0 version with the generic counters. Versioned counters will simply be unregistered for that version.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The aspnet_regiis.exe uses log text files to store traces of the operations performed. The logs are stored in the %TEMP% folder and are named something like ASPNETSetup_00xxx.log. These files can be examined, along with the event log when looking for clues of what went wrong. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Running aspnet_regiis.exe -iru from the latest version is the safest and recommended workaround when trying to fix issues with ASP.NET performance counters.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">What happens during runtime?<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Internally, ASP.NET performance counters mechanism uses a client/server approach. In this case, the server is the worker process; say w3wp.exe, while the clients are other processes that consume performance counter data using Win32 API, such as PDH, registry functions (e.g. perfmon), or a higher level API such as System.Diagnostics or WMI. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">During runtime, whenever a web application is run and the worker process starts, it loads webengine.dll (or webengine4.dll in .Net 4.0). This library, among other many things, will initialize the performance counters local storage in the process. It will also create a named pipe to which clients will be able to connect and read the counters data from. The name of the pipe is stored in the HKLM\SYSTEM\CurrentControlSet\services\ASP.NET_x.x.xxxxx\Names registry key, so clients can find it. </span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The processing of the named pipe is asynchronous. </span></span><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The library uses an IO completion thread from the CLR, which wakes up every time some client wants to get performance counter data. Other than that, the feature doesn&rsquo;t consume much cycles, except when some part of ASP.NET runtime wants to set or increment a performance counter value. For instance, when a request comes, we need to increase the value of the "ASP.NET\Requests Current" counter. When the request is done, we decrement it.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">When a client such as perfmon, wants to get performance counters data, using their API of choice, the Os will loop through all registered counters at HKLM\SYSTEM\CurrentControlSet\services, calling the Open export. This will eventually call the aspnet_perf.dll, which will initialize the client side of the connection. Among other things, the library will create two background threads. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">One thread monitors the HKLM\SYSTEM\CurrentControlSet\services\ASP.NET_x.x.xxxxx\Names registry key, so it will be informed of any new worker process. <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">The second thread will enter a loop, waking up every 400 milliseconds (or sooner, if instructed by a call to the Collect export) and reading data thru the named pipes from all worker processes. The data is stored in a global area, and it will be returned to the clients through the Collect export. That call usually executes on the main thread of the client process. A locking mechanism is used to protect the shared memory.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">If an error is detected during the reading of the pipes, the error is ignored and the data is cleared, just in case the worker process dies unexpectedly. So, counters could report zeroes when running on heavy load.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">When transferring data thru the pipe, the client will first send its version number to the worker process, which will validate that it matches its own. If it does it will send the performance counter data back.<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Any error during clients calls to Collect should be stored in the event log. There is not internal reporting for errors on the gathering threads.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Conclusion.<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Hopefully, the information contained here will help somebody. As usual, I can&rsquo;t really see what the possible uses of the information presented here are. In any case, I hope it will benefit someone.<o:p></o:p></span></span></p>
<p class="MsoNormal"><b><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Additional Resources<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Other performance related articles: <a href="https://blogs.msdn.com/josere">https://blogs.msdn.com/josere</a> &nbsp;</span></span></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">Performance counters in msdn: </span></span><a href="https://msdn.microsoft.com/en-us/library/aa373083(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">https://msdn.microsoft.com/en-us/library/aa373083(VS.85).aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">OpenPerformanceData: </span></span><a href="https://msdn.microsoft.com/en-us/library/aa372200(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">https://msdn.microsoft.com/en-us/library/aa372200(VS.85).aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">CollectPerformanceData: </span></span><a href="https://msdn.microsoft.com/en-us/library/aa371898(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">https://msdn.microsoft.com/en-us/library/aa371898(VS.85).aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">ClosePerformanceData: </span></span><a href="https://msdn.microsoft.com/en-us/library/aa371895(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">https://msdn.microsoft.com/en-us/library/aa371895(VS.85).aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <span style="mso-spacerun: yes;">&nbsp;</span><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">lodctr: </span></span><a href="https://msdn.microsoft.com/en-us/library/ms894317.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">https://msdn.microsoft.com/en-us/library/ms894317.aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">unlodctr: </span></span><a href="https://msdn.microsoft.com/en-us/library/ms929082.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">https://msdn.microsoft.com/en-us/library/ms929082.aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">LoadPerfCounterTextStrings: </span></span><a href="https://msdn.microsoft.com/en-us/library/aa372187.aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">https://msdn.microsoft.com/en-us/library/aa372187.aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <span style="mso-spacerun: yes;">&nbsp;</span><span style="mso-spacerun: yes;">&nbsp;</span><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;">UnloadPerfCounterTextStrings: </span></span><a href="https://msdn.microsoft.com/en-us/library/aa373205(VS.85).aspx"><span style="font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri; color: #0000ff;">https://msdn.microsoft.com/en-us/library/aa373205(VS.85).aspx</span></span></a><span style="color: #333333; font-size: 12pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"><span style="font-family: Calibri;"> <o:p></o:p></span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>ASP.NET Internals - Server controls fields and performance.</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/asp-net-internals-server-controls-fields-and-performance</link>
      <pubDate>Tue, 04 May 2010 18:39:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2010/05/04/asp-net-internals-server-controls-fields-and-performance/</guid>
      <description><![CDATA[Introduction
It&rsquo;s not a secret that the less server controls you have in an ASP.NET web page...]]></description>
      <content:encoded><![CDATA[<p class="MsoNormal"><b><span style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="font-size: small;"><span style="font-family: Calibri;">Introduction<o:p></o:p></span></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">It&rsquo;s not a secret that the less server controls you have in an ASP.NET web page the better the performance. The memory allocation of the objects is fast but processing will vary depending on many factors. Additionally, the garbage collector needs to expend time releasing the memory. Furthermore, server controls are processed recursively several times during request, in the processing of events such as init or rendering. Also, the more controls you have the more memory you consume.</span></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">It&rsquo;s very common to have a big number of instances of server controls. A simple grid page can contain hundreds of instances. And since they are created and destroyed in each request their number can be staggering. Imagine a web server under load serving thousands of requests per second. <span style="mso-spacerun: yes">&nbsp;</span></span></span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Furthermore, the internal implementation of the System.Web.UI.Control class (the base class for all server controls in the web forms page, including the page itself, user controls and many others) can have an impact on performance when used one way or another.</span></p>
<p class="MsoNormal"><b><span style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="font-size: small;"><span style="font-family: Calibri;">Occasionally used fields and rarely used fields<o:p></o:p></span></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The class contains a big number of private fields used to support a large array of features. Some of these fields are used only occasionally, so to optimize the size of the controls, the ASP.NET team moved them to a different class. The control class contains a reference to this class and the first time the private field is needed, an instance of the occasional fields is created. </span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">In addition to this, there is a group of fields that is used only rarely, so these fields were moved to yet another class and a reference was included in the occasional field class. With the instantiation happening pretty much the same way than the occasional fields. </span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The&nbsp;code below ilustrates this relationship. The control class will have the ocassional and rare fields encapsulated in private properties. Take a look at the reflector desassembly for the Control class for the actual implementation. Note that accessing a rare field will instantiate both the rare and the occasional field objects.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;"><img height="404" width="432" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/00/86/79/blog2_figure1a.gif" original-url="https://blogs.msdn.com/photos/josere/images/10008679/original.aspx" align="left" alt="figure 1" title="figure 1" style="width: 432px; height: 404px;" />In that case, server controls using occasional or rare fields can easily double or triple the instance of object created. We have verified through performance runs that reducing the number of total instances improves the performance (and the memory consumption) of ASP.NET requests. <span style="mso-spacerun: yes">&nbsp;</span>Reducing the number of controls that instantiate occasional and rare fields also improves performance and memory usage.</span></p>
<p class="MsoNormal"><b><span style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="font-size: small;"><span style="font-family: Calibri;">ASP.NET 4.0 optimization.<o:p></o:p></span></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">In fact, during .NET 4.0 development, we analyzed which fields were used more often than others in several scenarios and re-organized them accordingly. Moving the less used fields to the occasional and rare fields classes, or move them back to the control class itself when they were used very often. <span style="mso-spacerun: yes">&nbsp;</span>This optimization improved the performance (throughput and working set usage) of the scenarios used. </span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">In 2.0 the concept of ocassional and rare fields existed. So this was a concern back then too. However, with the years we've been adding new features that required new private fields in that class. So, the initial optimization was kind of stale. During 4.0 we added even more fields, and we noticied regressions in performance. So we decided it was time for a re-optimization. The regression disappeared and we even saw better performance in some scenarios.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Using Reflector on System.Web.dll on 2.0 and 4.0 versions will show the differences on implementation of the Control class.</span></p>
<p class="MsoNormal"><b><span style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="font-size: small;"><span style="font-family: Calibri;">Measuring your server controls usage.<o:p></o:p></span></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Unfortunately, it&rsquo;s hard from a customer stand point to control when the occasional fields and the rare fields are instantiated. Because this is triggered by the usage of specific features that is not evident that will use those fields.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The only thing we can do is to measure the number of controls and which ones are instantiating the occasional and rare fields. Seeing what type generates the rare and occasional fields might allow you to improve the performance of your pages, if this is vital in your scenario. In general, reducing the number of controls will improve your performance. <span style="mso-spacerun: yes">&nbsp;</span>But it&rsquo;s better to reduce those with occasional and/or rare fields.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Note that, like all performance improvement, you usually have a trade off to make. For instance, we&rsquo;ve seen the user controls (.ascx files) instantiate the occasional fields. However, user controls has other advantages so you need to find a balance. A typical place to reduce controls is the ones created inside grid cells, since they are replicated in the table.</span></p>
<p class="MsoNormal"><b><span style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="font-size: small;"><span style="font-family: Calibri;">Using an http module to view your controls.<o:p></o:p></span></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">To view the fields&rsquo; usage in your server controls, we created an http module that uses reflection to hack into the controls hierarchy, starting with the page. Another notification is used to attach a table with a report so that can be seen when the page is requested, pretty much the same way </span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 9pt">trace.axd</span><span style="font-family: Calibri; font-size: small;"> report is concatenated when trace=&rdquo;true&rdquo; is used on a page. We could have used global.asax instead but this solution seems cleaner to me.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">You can use the module to calculate the controls usage in your own pages. You can deploy the mentioned module to your app and request your pages. You probably want to do that on a development environment. You don&rsquo;t want your customers to see the report table on all your pages. Plus, an additional module in the pipeline has a performance cost, especially since we use reflection.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">To use the module, you can copy the correct language version to your </span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 9pt">App_Code</span><span style="font-family: Calibri; font-size: small;"> folder. I have provided a C# and a VB.NET versions in the attachment of this blog. Click </span><a href="https://blogs.msdn.com/josere/attachment/10007490.ashx"><span style="font-family: Calibri; color: #0000ff; font-size: small;">here</span></a><span style="font-family: Calibri; font-size: small;"> to get the modules source code.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">You also need to edit your web.config to enable the module to run. The setting changed depends on the pipeline mode you are using.<span style="mso-spacerun: yes">&nbsp; </span>For a integrated pipeline mode, you have to use the &lt;system.webServer/modules&gt; section:</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">configuration</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!--</span><span style="FONT-FAMILY: 'Courier New'; COLOR: green; FONT-SIZE: 10pt; mso-no-proof: yes"> ... </span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">--&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">system.webServer</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!--</span><span style="FONT-FAMILY: 'Courier New'; COLOR: green; FONT-SIZE: 10pt; mso-no-proof: yes"> ... </span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">--&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">modules</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">add</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"> </span><span style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes">name</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">=</span><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes">"<span style="COLOR: blue">ControlFieldsStatsModule</span>"<span style="COLOR: blue"> </span><span style="COLOR: red">preCondition</span><span style="COLOR: blue">=</span>"<span style="COLOR: blue">managedHandler</span>"<span style="COLOR: blue"> </span><span style="COLOR: red">type</span><span style="COLOR: blue">=</span>"<span style="COLOR: blue">ControlFieldsStatsModule, App_Code</span>"<span style="COLOR: blue">/&gt;<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!--</span><span style="FONT-FAMILY: 'Courier New'; COLOR: green; FONT-SIZE: 10pt; mso-no-proof: yes"> ... </span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">--&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></o:p></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">For Classic mode (includes Visual Studio mini web server, IIS6 etc) you use the &lt;system.web/httpModules&gt; section:</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">configuration</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!--</span><span style="FONT-FAMILY: 'Courier New'; COLOR: green; FONT-SIZE: 10pt; mso-no-proof: yes"> ... </span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">--&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">system.web</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!--</span><span style="FONT-FAMILY: 'Courier New'; COLOR: green; FONT-SIZE: 10pt; mso-no-proof: yes"> ... </span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">--&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">httpModules</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;</span><span style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-no-proof: yes">add</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"> </span><span style="FONT-FAMILY: 'Courier New'; COLOR: red; FONT-SIZE: 10pt; mso-no-proof: yes">name</span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">=</span><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-no-proof: yes">"<span style="COLOR: blue">ControlFieldsStatsModule</span>"<span style="COLOR: blue"> </span><span style="COLOR: red">type</span><span style="COLOR: blue">=</span>"<span style="COLOR: blue">ControlFieldsStatsModule, App_Code</span>"<span style="COLOR: blue">/&gt;<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;!--</span><span style="FONT-FAMILY: 'Courier New'; COLOR: green; FONT-SIZE: 10pt; mso-no-proof: yes"> ... </span><span style="FONT-FAMILY: 'Courier New'; COLOR: blue; FONT-SIZE: 10pt; mso-no-proof: yes">--&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></o:p></p>
<p class="MsoNormal"><b><span style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="font-size: small;"><span style="font-family: Calibri;">The report.<o:p></o:p></span></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Requesting the page, will attach a table like below, with all control types and if they use occasional and/or rare fields.<span style="mso-spacerun: yes">&nbsp; </span>The stats shown were obtained from the default page on a freshly created Dynamic Data project, connected to Northwind database:</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">Server Control Fields Stats: <o:p></o:p></span></p>
<div align="center" class="MsoNormal" style="TEXT-ALIGN: center; LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">
<hr width="100%" size="2" align="center" />
</span></div>
<table cellpadding="0" border="1" class="MsoNormalTable" style="mso-cellspacing: 1.5pt; mso-yfti-tbllook: 1184">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal" align="center"><b><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">Type<o:p></o:p></span></b></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal" align="center"><b><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">Count<o:p></o:p></span></b></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal" align="center"><b><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">Occasional<o:p></o:p></span></b></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal" align="center"><b><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">Rare<o:p></o:p></span></b></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.ScriptManagerProxy<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.LiteralControl<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">38<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.HtmlControls.HtmlLink<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.DynamicData.DynamicHyperLink<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">13<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">13<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.WebControls.GridViewRow<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">15<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 6">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.HtmlControls.HtmlTitle<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 7">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.WebControls.ContentPlaceHolder<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">2<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 8">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.HtmlControls.HtmlAnchor<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 9">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.WebControls.ChildTable<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 10">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.ScriptManager<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 11">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.HtmlControls.HtmlForm<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 12">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.WebControls.DataControlFieldCell<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">14<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 13">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.WebControls.DataControlFieldHeaderCell<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 14">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.WebControls.GridView<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 15">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.HtmlControls.HtmlHead<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 16">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">ASP.default_aspx<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 17">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">System.Web.UI.HtmlControls.HtmlImage<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 18">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">ASP.site_master<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">0<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 19; mso-yfti-lastrow: yes">
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt"></td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">95<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">22<o:p></o:p></span></p>
</td>
<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0.75pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0.75pt; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 0.75pt">
<p class="MsoNormal"><span style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'">1<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></o:p></p>
<p class="MsoNormal"><b><span style="mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="font-size: small;"><span style="font-family: Calibri;">Conclusion<o:p></o:p></span></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">This information could potentially be used to select what types of controls are more likely to improve the performance of the page if they are removed. The field&rsquo;s usage was optimized in .Net 4.0, but it's <span style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">impossible </span>to do that for all scenarios.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Other performance related articles: <a href="https://blogs.msdn.com/josere">https://blogs.msdn.com/josere</a></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/00/74/90/ControlFieldsStatsModule.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-00-74-90/ControlFieldsStatsModule.zip">ControlFieldsStatsModule.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>ASP.NET Perfecto - Taking a quick peek at the performance of your ASP.NET app</title>
      <link>https://docs.microsoft.com/archive/blogs/josere/asp-net-perfecto-taking-a-quick-peek-at-the-performance-of-your-asp-net-app</link>
      <pubDate>Fri, 09 Apr 2010 13:53:00 GMT</pubDate>
      <dc:creator><![CDATA[Jose Reyes - ASP.NET]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/josere/2010/04/09/asp-net-perfecto-taking-a-quick-peek-at-the-performance-of-your-asp-net-app/</guid>
      <description><![CDATA[Introduction
Historically, using ETW is not very friendly. Existent tools are hard-to-use and the...]]></description>
      <content:encoded><![CDATA[<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">Introduction<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Historically, using ETW is not very friendly. Existent tools are hard-to-use and the data generated is raw and mostly unprocessed. You can today generate ASP.NET traces using logman.exe and then use tracerpt.exe to generate a CSV file. This data is hard to look at it. <span style="mso-spacerun: yes;">&nbsp;</span>Another option is to use FREB to generate traces. That log contains useful information, but sometimes is too much, especially if you just want to take a quick peek at a request or two. And ASP.NET events are only listed. The relation between the events is not used.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Currently, here are some issues associated with using ETW to measure ASP.NET performance:</span></p>
<p class="MsoListParagraphCxSpFirst"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Not user friendly.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Generates a lot of raw unprocessed data (for instance if generating a CSV file using logman.exe and tracerpt.exe).</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">3.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">FREB generates a file per each request. When browsing the log folder, it&rsquo;s impossible to know which file belongs to which request. There is no summary that shows all requests traced.</span></p>
<p class="MsoListParagraphCxSpLast"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">4.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Both methods just list the ASPNET events. They miss an important point. The information is not only in the fact that the event happened. An important piece of information is the duration between events. FREB shows duration for IIS event, but not for ASP.NET events. For instance, you can&rsquo;t know how long your Page Load event took.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The tool that we are providing here will allow you to collect ETW traces for ASP.NET requests and look at them in a more friendly view. The tool doesn&rsquo;t contain any executable. It just harnesses the functionality already in existence in Windows. In this case the data collector sets provided in the &ldquo;Performance Monitor&rdquo; (aka perfmon) in Vista or newer versions. </span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The tool is made out of three XML files. One file contains the data collector set definition (<i style="mso-bidi-font-style: normal;">Perfecto.DataCollectorSet.xml</i>). A second file (<i style="mso-bidi-font-style: normal;">Reports.Microsoft.ASPNET.xml</i>) contains the schema of the ASP.NET specific data included on ETW traces. A third xml file (<i style="mso-bidi-font-style: normal;">Rules.Microsoft.ASPNET.xml</i>) provides rules that will modify and rearrange the data so it&rsquo;s easier to read and understand. Setup is very simple, just the XMLs and a setup.cmd script. </span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">The tool can be used for purposes others than performance. For instance, you can see what modules are running in the pipeline. Or you can see what request are generating manage code to run.</span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">We are considering adding this tool&rsquo;s functionality to </span><a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;displaylang=en"><span style="font-family: Calibri; font-size: small;">DebugDiag</span></a><span style="font-family: Calibri; font-size: small;">. </span></p>
<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">Setup steps:<o:p></o:p></span></span></b></p>
<p class="MsoListParagraphCxSpFirst"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Download and unzip </span><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/34/34/perfecto.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-09-99-34-34/perfecto.zip"><span style="font-family: Calibri; font-size: small;">perfecto.zip</span></a><span style="font-family: Calibri; font-size: small;">.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Run setup.cmd. This script will:</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">a)</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Create a folder at <i style="mso-bidi-font-style: normal;">&ldquo;%programfiles%\perfecto</i>&rdquo; and copy there the three xml files listed before.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">b)</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Create the data collector set:</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">logman.exe import "Service\ASPNET Perfecto" -xml Perfecto.DataCollectorSet.xml<o:p></o:p></span></p>
<p class="MsoListParagraphCxSpLast"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">c)<span style="font: 7pt 'Times New Roman';">&nbsp; </span></span></span><span style="font-size: small;"><span style="font-family: Calibri;">Open &ldquo;Performance Monitor&rdquo; (perfmon).<span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;"><o:p></o:p></span></span></span></p>
<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">Running steps:<o:p></o:p></span></span></b></p>
<p class="MsoListParagraphCxSpFirst"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">On perfmon, navigate to the "Performance\Data Collector Sets\User Defined\ASPNET Perfecto" node.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Click the "Start the Data Collector Set" button on the tool bar.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">3.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Wait for/or make requests to the server (more than 10 seconds).</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">4.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Click the "Stop the Data Collector Set" button on the tool bar.</span></p>
<p class="MsoListParagraphCxSpLast"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">5.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Click the "View latest report" button on the tool bar or navigate to the last report at "Performance\Reports\User Defined\ASPNET Perfecto".</span></p>
<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">Perfecto Requirements <o:p></o:p></span></span></b></p>
<p class="MsoListParagraphCxSpFirst"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Only works on Vista or newer Os.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Requires IIS tracing: (run </span><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">dism /online /enable-feature /featurename:IIS-HttpTracing)</span><span style="font-family: Calibri; font-size: small;">.</span></p>
<p class="MsoListParagraphCxSpLast"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">3.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">Only ~140K of disk space is needed for the Xml files at "<i style="mso-bidi-font-style: normal;">%programfiles%\perfecto</i>".</span></p>
<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">Using the data collector set.<o:p></o:p></span></span></b></p>
<p class="MsoListParagraphCxSpFirst"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">How to View the Performance Counters Graph: The report has three different views in perfmon data collector sets. You can right-click on the report, select "View", and "Performance Monitor" to see the graphic view of the performance counters collected.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">How to Send Data by Email: Right-click on the report, select "View", and "Folder". Select the files you want to send, right click and select "Send To\Mail Recipient". You need to have email client properly configured.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">3.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">How to Start/Stop Collection From Batch File:</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">logman.exe start -n "Service\ASPNET Perfecto"<o:p></o:p></span></p>
<p class="MsoListParagraphCxSpLast"><span style="line-height: 115%; font-family: 'Courier New'; font-size: 9pt;">logman.exe stop -n "Service\ASPNET Perfecto"</span></p>
<p class="MsoNormal"><i style="mso-bidi-font-style: normal;"><span style="font-size: small;"><span style="font-family: Calibri;">Note: The View commands are also available as toolbar buttons.<o:p></o:p></span></span></i></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">Sometimes you can see an error like below:</span></p>
<p class="MsoNormal"><i><span style="line-height: 115%; font-family: 'Segoe UI','sans-serif'; font-size: 9pt;">Error Code: 0xc0000bf8</span></i><span style="line-height: 115%; font-family: 'Segoe UI','sans-serif'; font-size: 9pt;"><br /><i>Error Message: At least one of the input binary log files contain fewer than two data samples.</i></span><span style="line-height: 115%; font-size: 9pt;"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">This usually happens when you collected data too fast. The performance counters are set by default to collect every 10 seconds. So a fast start/stop sequence may end without enough counter data being collected. Always allow more than 10 seconds between a start and stop commands. Or otherwise delete the performance counters collector or change the sample interval.</span></p>
<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">Default sizes of the log files<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">One problem users usually have with ETW is that they can forget to turn off collection, so the ETL files can grow very big. To avoid this, we made the default in the data controller set to have a circular file: so older events are overwritten when the file grows beyond the default 5MB size. There is also a limit of 1GB for all files. This includes .etl, .blg and the reports XMLs. </span></p>
<p class="MsoNormal"><span style="font-family: Calibri; font-size: small;">These settings can be changed on the perfmon UI if you find they are not good for you:</span></p>
<p class="MsoListParagraphCxSpFirst"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">1.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">To change maximum size of the log file, right click on the &ldquo;ASPNET Perfecto&rdquo; data collector set and chose properties. Select the "Stop Condition" tab.</span></p>
<p class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">2.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">To disable circular file, double click the AspnetTrace collector to open the properties and select the "File" tab.</span></p>
<p class="MsoListParagraphCxSpLast"><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri; font-size: small;">3.</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: Calibri; font-size: small;">To change the size of all log files, open the data manager in &ldquo;Reports\User Defined\ASPNET Perfecto&rdquo;. Right click for properties and change the &ldquo;Maximum root path size:&rdquo;.</span></p>
<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">ETW Performance Effect on Production Servers. <o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">Enabling ETW events for the ASP.NET provider will make a hello world page around 38% slower, without impacting noticeable the memory usage. The effect on a web app such as IBuySpy is lower: around 11%.<span style="mso-tab-count: 2;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></p>
<table style="border-collapse: collapse; mso-border-alt: solid #BBBBBB .75pt; mso-yfti-tbllook: 1184;" class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="background-color: transparent; mso-border-alt: solid #BBBBBB .75pt; border: #bbbbbb 1pt solid; padding: 3pt;">
<p class="MsoNormal" align="center"><b><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Test Name<o:p></o:p></span></b></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #bbbbbb 1pt solid; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal" align="center"><b><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Metric<o:p></o:p></span></b></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #bbbbbb 1pt solid; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal" align="center"><b><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Unit<o:p></o:p></span></b></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #bbbbbb 1pt solid; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal" align="center"><b><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">#Procs<o:p></o:p></span></b></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #bbbbbb 1pt solid; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal" align="center"><b><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Baseline<o:p></o:p></span></b></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #bbbbbb 1pt solid; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal" align="center"><b><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Result<o:p></o:p></span></b></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #bbbbbb 1pt solid; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal" align="center"><b><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Diff<o:p></o:p></span></b></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1;">
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #bbbbbb 1pt solid; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Helloworld<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Throughput<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">req/sec<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">16<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">40852.00<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">25338.00<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">-37.98%<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #bbbbbb 1pt solid; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Helloworld<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Working Set<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">bytes<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">16<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">85499904.00<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">88651013.33<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">-3.69%<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #bbbbbb 1pt solid; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">IBuySpy<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Throughput<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">req/sec<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">16<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">4573.00<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">4062.33<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">-11.17%<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes;">
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #bbbbbb 1pt solid; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">IBuySpy<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">Working Set<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">bytes<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">16<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">172097376.00<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">165901248.00<o:p></o:p></span></p>
</td>
<td style="border-bottom: #bbbbbb 1pt solid; border-left: #d4d0c8; background-color: transparent; border-top: #d4d0c8; border-right: #bbbbbb 1pt solid; mso-border-alt: solid #BBBBBB .75pt; mso-border-left-alt: solid #BBBBBB .75pt; mso-border-top-alt: solid #BBBBBB .75pt; padding: 3pt;">
<p class="MsoNormal"><span style="font-family: 'Segoe UI','sans-serif'; font-size: 10pt; mso-fareast-font-family: 'Times New Roman';">3.60%<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></o:p></p>
<p class="MsoNormal"><b><span style="line-height: 115%; font-size: 12pt;"><span style="font-family: Calibri;">Sample report:<o:p></o:p></span></span></b></p>
<p class="MsoNormal"><span style="font-size: small;"><span style="font-family: Calibri;">Below is a table that shows and excerpt of how the report looks like:</span><span style="line-height: 115%; display: none; font-family: 'Arial','sans-serif'; color: black; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-hide: all;"> <o:p></o:p></span></span></p>
<table style="border: 1pt solid gray; width: 82%; mso-border-alt: solid gray .75pt; mso-yfti-tbllook: 1184; mso-cellspacing: 2.2pt; mso-padding-alt: 0in 0in 0in 0in;" class="MsoNormalTable" border="1" cellspacing="3" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="background-color: transparent; width: 99.62%; border: gray; padding: 0in;" width="99%">
<table style="width: 100%; mso-yfti-tbllook: 1184; mso-cellspacing: 1.5pt;" class="MsoNormalTable" border="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;">
<td style="background-color: transparent; border: #d4d0c8; padding: 0.75pt;">
<p class="MsoNormal"><b><span style="font-family: 'Arial','sans-serif'; color: black; mso-fareast-font-family: 'Times New Roman';"><span style="font-size: small;">ASP.NET Requests<o:p></o:p></span></span></b></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr style="mso-yfti-irow: 1;">
<td style="background-color: transparent; width: 99.62%; border: gray; padding: 0in;" width="99%">
<table style="border: 1pt solid gray; width: 100%; mso-border-alt: solid gray .75pt; mso-yfti-tbllook: 1184; mso-cellspacing: 1.5pt;" class="MsoNormalTable" border="1" cellpadding="0">
<thead>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="background-color: transparent; width: 2.28%; border: gray; padding: 0.75pt;" width="2%"><span style="font-size: small;">&nbsp;</span></td>
<td style="background-color: transparent; width: 5.98%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="5%">
<p class="MsoNormal"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Verb<o:p></o:p></span></b></p>
</td>
<td style="background-color: transparent; width: 29.36%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="29%">
<p class="MsoNormal"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Path<o:p></o:p></span></b></p>
</td>
<td style="background-color: transparent; width: 22.34%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="22%">
<p class="MsoNormal"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Query String<o:p></o:p></span></b></p>
</td>
<td style="background-color: transparent; width: 18.4%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="18%">
<p class="MsoNormal"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Handler Name<o:p></o:p></span></b></p>
</td>
<td style="background-color: transparent; width: 20.72%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="20%">
<p class="MsoNormal" align="right"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Duration (millisecs)<o:p></o:p></span></b></p>
</td>
</tr>
</thead>
<tbody>
<tr style="mso-yfti-irow: 1;">
<td style="width: 2.28%; background: whitesmoke; border: gray; padding: 0.75pt;" width="2%">
<p class="MsoNormal"></p>
</td>
<td style="width: 5.98%; background: whitesmoke; border: gray; padding: 0.75pt;" width="5%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">GET<o:p></o:p></span></p>
</td>
<td style="width: 29.36%; background: whitesmoke; border: gray; padding: 0.75pt;" width="29%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">/app/page.aspx<o:p></o:p></span></p>
</td>
<td style="width: 22.34%; background: whitesmoke; border: gray; padding: 0.75pt;" width="22%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">test=1234<o:p></o:p></span></p>
</td>
<td style="width: 18.4%; background: whitesmoke; border: gray; padding: 0.75pt;" width="18%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">ASP.global_asax<o:p></o:p></span></p>
</td>
<td style="width: 20.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="20%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,443.85<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes;">
<td style="background-color: transparent; width: 99.74%; border: gray; padding: 0.75pt;" width="99%" colspan="6">
<table style="width: 100%; mso-yfti-tbllook: 1184; mso-cellspacing: 0in; mso-padding-alt: 0in 0in 0in 0in;" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;">
<td style="background-color: transparent; width: 7.5pt; border: #d4d0c8; padding: 0in;" width="10"></td>
<td style="background-color: transparent; border: #d4d0c8; padding: 0in;">
<table style="border: 1pt solid gray; width: 100%; mso-border-alt: solid gray .75pt; mso-yfti-tbllook: 1184; mso-cellspacing: 1.5pt;" class="MsoNormalTable" border="1" cellpadding="0">
<thead>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="background-color: transparent; width: 64.72%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="64%">
<p class="MsoNormal"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Step Name<o:p></o:p></span></b></p>
</td>
<td style="background-color: transparent; width: 16.7%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="16%">
<p class="MsoNormal" align="right"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Elapsed (millisecs)<o:p></o:p></span></b></p>
</td>
<td style="background-color: transparent; width: 16.96%; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom" width="16%">
<p class="MsoNormal" align="right"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Duration (millisecs)<o:p></o:p></span></b></p>
</td>
</tr>
</thead>
<tbody>
<tr style="mso-yfti-irow: 1;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Create App Domain<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.00<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">5,954.18<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Request Starts<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,014.74<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.00<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Enter App Domain: /LM/W3SVC/1/ROOT/app-1-129151551736866465<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,015.22<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.00<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Security.WindowsAuthenticationModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,084.86<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.07<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Handlers.ScriptModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,085.22<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">12.52<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 6;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Security.DefaultAuthenticationModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,098.33<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.03<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 7;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.ServiceModel.Activation.ServiceHttpModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,098.50<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">15.07<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 8;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Security.UrlAuthorizationModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,113.88<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.90<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 9;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Security.FileAuthorizationModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,114.90<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">2.31<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 10;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Caching.OutputCacheModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,117.44<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.25<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 11;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Routing.UrlRoutingModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">6,117.82<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.27<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 12;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.SessionState.SessionStateModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,246.15<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.29<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 13;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Profile.ProfileModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,246.56<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.05<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 14;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Handlers.ScriptModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,246.73<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.06<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 15;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="line-height: 115%; font-family: 'Arial','sans-serif'; color: black; font-size: 9pt;">ASP.NET Execute Handler<o:p></o:p></span></p>
<table style="border: 1pt solid gray; width: 100%; mso-border-alt: solid gray .75pt; mso-yfti-tbllook: 1184; mso-cellspacing: 1.5pt;" class="MsoNormalTable" border="1" cellpadding="0">
<thead>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="background-color: transparent; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom">
<p class="MsoNormal"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Step Name<o:p></o:p></span></b></p>
</td>
</tr>
</thead>
<tbody>
<tr style="mso-yfti-irow: 1;">
<td style="background: whitesmoke; border: gray; padding: 0.75pt;">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Page PreInit<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="background: white; border: gray; padding: 0.75pt;">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Page Init<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="background: whitesmoke; border: gray; padding: 0.75pt;">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Page Load<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4;">
<td style="background: white; border: gray; padding: 0.75pt;">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Page PreRender<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5;">
<td style="background: whitesmoke; border: gray; padding: 0.75pt;">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Page Save Viewstate<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 6; mso-yfti-lastrow: yes;">
<td style="background: white; border: gray; padding: 0.75pt;">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">Page Render<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="line-height: 115%; font-family: 'Arial','sans-serif'; color: black; font-size: 9pt;">7,246.95<o:p></o:p></span></p>
<table style="border: 1pt solid gray; width: 100%; mso-border-alt: solid gray .75pt; mso-yfti-tbllook: 1184; mso-cellspacing: 1.5pt;" class="MsoNormalTable" border="1" cellpadding="0">
<thead>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="background-color: transparent; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom">
<p class="MsoNormal" align="right"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Elapsed<o:p></o:p></span></b></p>
</td>
</tr>
</thead>
<tbody>
<tr style="mso-yfti-irow: 1;">
<td style="width: 8%; background: whitesmoke; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,429.90<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="width: 8%; background: white; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,430.11<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="width: 8%; background: whitesmoke; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,430.37<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4;">
<td style="width: 8%; background: white; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,430.92<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5;">
<td style="width: 8%; background: whitesmoke; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,437.30<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 6; mso-yfti-lastrow: yes;">
<td style="width: 8%; background: white; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,437.45<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="line-height: 115%; font-family: 'Arial','sans-serif'; color: black; font-size: 9pt;">194.04<o:p></o:p></span></p>
<table style="border: 1pt solid gray; width: 100%; mso-border-alt: solid gray .75pt; mso-yfti-tbllook: 1184; mso-cellspacing: 1.5pt;" class="MsoNormalTable" border="1" cellpadding="0">
<thead>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="background-color: transparent; mso-border-alt: solid lightgrey .75pt; border: lightgrey 1pt solid; padding: 0.75pt;" valign="bottom">
<p class="MsoNormal" align="right"><b><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 8.5pt; mso-fareast-font-family: 'Times New Roman';">Duration<o:p></o:p></span></b></p>
</td>
</tr>
</thead>
<tbody>
<tr style="mso-yfti-irow: 1;">
<td style="width: 8.64%; background: whitesmoke; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.05<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="width: 8.64%; background: white; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.04<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="width: 8.64%; background: whitesmoke; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.40<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4;">
<td style="width: 8.64%; background: white; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.03<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5;">
<td style="width: 8.64%; background: whitesmoke; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.01<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 6; mso-yfti-lastrow: yes;">
<td style="width: 8.64%; background: white; border: gray; padding: 0.75pt;" width="8%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">1.59<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr style="mso-yfti-irow: 16;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.SessionState.SessionStateModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,441.25<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.13<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 17;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Caching.OutputCacheModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,442.12<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.04<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 18;">
<td style="width: 64.72%; background: white; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Profile.ProfileModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,442.50<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: white; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.01<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 19; mso-yfti-lastrow: yes;">
<td style="width: 64.72%; background: whitesmoke; border: gray; padding: 0.75pt;" width="64%">
<p class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">System.Web.Handlers.ScriptModule<o:p></o:p></span></p>
</td>
<td style="width: 16.7%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">7,442.61<o:p></o:p></span></p>
</td>
<td style="width: 16.96%; background: whitesmoke; border: gray; padding: 0.75pt;" width="16%">
<p class="MsoNormal" align="right"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 9pt; mso-fareast-font-family: 'Times New Roman';">0.03<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes;">
<td style="background-color: transparent; width: 99.62%; border: gray; padding: 0in;" width="99%"></td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p><span style="font-family: Calibri; font-size: small;">Other performance related articles: <a href="https://blogs.msdn.com/josere">https://blogs.msdn.com/josere</a></span></o:p></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/09/99/34/34/perfecto.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-09-99-34-34/perfecto.zip">perfecto.zip</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>