<?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>Colin Thomsen's Microsoft Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/colinth/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/colinth/feed.xml</link>
    <description>I&amp;#039;m a developer working on the code profiler that ships with Visual Studio 2010 Premium and Ultimate editions. At a previous company I worked on computer vision software for face and gaze tracking.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:20:29 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Remote Debugging</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/remote-debugging</link>
      <pubDate>Thu, 30 Jun 2011 15:11:00 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2011/06/30/remote-debugging/</guid>
      <description><![CDATA[Every so often, on days like today, I need to debug on a machine where I don't have a debugger...]]></description>
      <content:encoded><![CDATA[<p>Every so often, on days like today, I need to debug on a machine where I don't have a debugger installed. There are a few options in this case, but one of the most convenient of these is to use Visual Studio's remote debugging facility.</p>
<p>The procedure is pretty convenient with Visual Studio 2010, since all you have to do is:</p>
<ol>
<li>Log into the machine you wish to debug on (you can use TS). In my case let's use msl-1440087.</li>
<li>Make sure you can navigate to a share on the machine with the debugger installed (galaxy-dev for example).</li>
<li>Run the right version of msvsmon.exe from the share, for example, the 32 bit version, as follows: <br /><span face="Courier New" style="font-family: 'Courier New';">&gt; "\\galaxy-dev\c$\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger\x86\msvsmon.exe"</span> <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/6607.image_624AA576.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/6607.image_5F00_624AA576.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/0410.image_thumb_01F97F3F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/0410.image_5F00_thumb_5F00_01F97F3F.png" width="640" height="112" /></a></li>
<li>Go back to the machine that the debugger is installed on (galaxy-dev) and choose 'Tools -&gt; Attach To Process...' <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/1122.remote_debugging.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21/1122.remote_5F00_debugging.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/1122.remote_debugging.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21/1122.remote_5F00_debugging.png" border="0" alt="" /></a></li>
<li>Enter the machine name where you started msvsmon.exe in the Qualifier section.</li>
<li>Select the process you wish to debug,</li>
<li>Choose the type of debugging - Native or Managed etc.</li>
<li>Select 'Attach'.</li>
</ol>
<p><br />Debug as you usually would. Thanks to Gregg for <a href="https://blogs.msdn.com/b/greggm/archive/2004/06/22/162546.aspx">writing a blog post</a>&nbsp;reminding me how to do this. You might also be interested in his post about <a href="https://blogs.msdn.com/b/greggm/archive/2004/10/04/237519.aspx">Remote Debugging without domain accounts</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Link: The Future of Microsoft Visual Studio Application Lifecycle Management</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/link-the-future-of-microsoft-visual-studio-application-lifecycle-management</link>
      <pubDate>Tue, 17 May 2011 16:31:00 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2011/05/17/link-the-future-of-microsoft-visual-studio-application-lifecycle-management/</guid>
      <description><![CDATA[The GM of Visual Studio Ultimate, Cameron Skinner, recently gave a talk at Tech-Ed 2011 about...]]></description>
      <content:encoded><![CDATA[<p>The GM of Visual Studio Ultimate, <a href="https://blogs.msdn.com/b/camerons/archive/2011/05/17/alm-vnext-announced-at-teched.aspx">Cameron Skinner</a>, recently gave a talk at Tech-Ed 2011 about <a href="https://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/The Future of Microsoft Visual Studio Application Lifecycle Management">Application Lifecycle Management</a>. It is worth taking a look at if you're interested in some of the new features being created for the next release of Visual Studio, such as the Team Navigator, shown below:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/4101.teched.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21/4101.teched.png"><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/4101.teched.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21/4101.teched.png" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>VS2010: Just My Code</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/vs2010-just-my-code</link>
      <pubDate>Thu, 12 May 2011 15:48:03 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2011/05/12/vs2010-just-my-code/</guid>
      <description><![CDATA[The ‘Just My Code’ feature in the profiler has a few differences to the ‘Just My Code’ feature in...]]></description>
      <content:encoded><![CDATA[<p>The ‘Just My Code’ feature in the profiler has a few differences to the ‘Just My Code’ feature in the debugger so this post should provide a useful introduction.</p>  <h2>Example Program</h2>  <p>Here’s a very simple program I’ll use in this post.</p>  <table border="1" cellspacing="0" cellpadding="2" width="400"><tbody>     <tr>       <td valign="top" width="400">         <pre class="csharpcode"><span class="kwrd">using</span> System;

<span class="kwrd">namespace</span> ConsoleApplication1
{
    <span class="kwrd">class</span> Program
    {
        <span class="kwrd">static</span> <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[] args)
        {
            Foo();
        }

        <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Foo()
        {
            <span class="kwrd">double</span> d = 0;
            <span class="kwrd">for</span> (<span class="kwrd">int</span> i = 0; i &lt; 100000000; ++i)
            {
                d += Math.Sqrt(i);
            }
            Console.WriteLine(d);
        }
    }
}</pre>
        </td>
    </tr>
  </tbody></table>

<h2>&#160;</h2>

<h2>Why ‘Just My Code’?</h2>

<p>Typically when profiling you are most interested in optimizing code that you either wrote or you have control over. Sure, sometimes there will be issues in the frameworks that you are using or in other binaries, but even then you often control the calls into those frameworks.&#160; Just My Code or JMC is intended to filter the data that is displayed in profiler reports so that more of the code you control shows up in the reports and the reports are more manageable.</p>

<p>For example, the Call Tree after collecting sampling data for the simple program above, with JMC off, is shown below: 
  <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/4426.jmc_off_calltree_1_36638987.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/4426.jmc_5F00_off_5F00_calltree_5F00_1_5F00_36638987.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jmc_off_calltree_1" border="0" alt="jmc_off_calltree_1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/3348.jmc_off_calltree_1_thumb_0F294052.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/3348.jmc_5F00_off_5F00_calltree_5F00_1_5F00_thumb_5F00_0F294052.png" width="640" height="328" /></a></p>

<p>With the default JMC options, this reduces down to: 
  <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/4010.jmc_on_calltree_1_080A03DA.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/4010.jmc_5F00_on_5F00_calltree_5F00_1_5F00_080A03DA.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jmc_on_calltree_1" border="0" alt="jmc_on_calltree_1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/7462.jmc_on_calltree_1_thumb_15DC49D5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/7462.jmc_5F00_on_5F00_calltree_5F00_1_5F00_thumb_5F00_15DC49D5.png" width="640" height="96" /></a></p>

<h2>What is ‘My Code’?</h2>

<p>There are two conditions for code being considered ‘My Code’ by the profiler and they are both at the Module level (Module Name column in the screenshots above). In the example above, this means the checks are made against the clr.dll, mscoreee.dll, mscoreei.dll and ConsoleApplication1.exe binaries. </p>

<p>Modules considered ‘My Code’:</p>

<ol>
  <li>the copyright string for the module does not contain ‘Microsoft’, OR: </li>

  <li>the module name is the same as the module name generated by building any project in the currently open Solution in Visual Studio. 
    <br /></li>
</ol>

<h2>How do I turn JMC on or off?</h2>

<p>You can temporarily toggle JMC on or off on the profiler Summary Page in the Notifications area using ‘Show All Code’ or ‘Hide All Code’ (shown in red below): 
  <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/8130.jmc_on1_0EBD0D5D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/8130.jmc_5F00_on1_5F00_0EBD0D5D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jmc_on1" border="0" alt="jmc_on1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/2275.jmc_on1_thumb_274CAAAD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/2275.jmc_5F00_on1_5F00_thumb_5F00_274CAAAD.png" width="640" height="391" /></a></p>

<p>The default setting may be configured as discussed in the following section.</p>

<h2>How do I configure JMC?</h2>

<p>Use Tools –&gt; Options –&gt; Performance Tools –&gt; General and set options in the ‘Just My Code’ section: 
  <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/3755.jmc_options_67169132.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/3755.jmc_5F00_options_5F00_67169132.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jmc_options" border="0" alt="jmc_options" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/4426.jmc_options_thumb_46FB8475.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/4426.jmc_5F00_options_5F00_thumb_5F00_46FB8475.png" width="559" height="322" /></a></p>

<p>The default has JMC on, showing one level of non-user callee functions. In the example above with JMC on, this is why we see the call to COMDouble::Sqrt(dobule) showing up in the call tree.</p>

<p>It is also possible to show one-level of non-user code calling user code, which in the example above would add one level of the non-user code that calls main, as shown below: 
  <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/6153.jmc_on_calltree_callers_1_02BB1D29.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/6153.jmc_5F00_on_5F00_calltree_5F00_callers_5F00_1_5F00_02BB1D29.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jmc_on_calltree_callers_1" border="0" alt="jmc_on_calltree_callers_1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/2671.jmc_on_calltree_callers_1_thumb_66AA5E3D.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-83-21-metablogapi/2671.jmc_5F00_on_5F00_calltree_5F00_callers_5F00_1_5F00_thumb_5F00_66AA5E3D.png" width="640" height="117" /></a></p>

<h2>Why is ‘Just My Code’ only available for sampling?</h2>

<p>When you instrument binaries for profiling, you have already performed some level of JMC. Only binaries that you instrument and first-level calls into other binaries will show up in the instrumentation report, so JMC is not really necessary.</p>]]></content:encoded>
    </item>
    <item>
      <title>Link: Beginners Guide to Performance Profiling</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/link-beginners-guide-to-performance-profiling</link>
      <pubDate>Fri, 06 May 2011 17:15:00 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2011/05/06/link-beginners-guide-to-performance-profiling/</guid>
      <description><![CDATA[The Visual Studio 2010 MSDN documentation includes some more detailed examples (including...]]></description>
      <content:encoded><![CDATA[<p>The Visual Studio 2010 MSDN documentation includes some more detailed examples (including screenshots) than previous versions. Here's a decent intro to profiling:<br /><a href="https://msdn.microsoft.com/en-us/library/ms182372.aspx" title="Beginners Guide to Performance Profiling">Beginners Guide to Performance Profiling</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Tip: Fixing VSPerfASPNetCmd metabase errors</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/tip-fixing-vsperfaspnetcmd-metabase-errors</link>
      <pubDate>Fri, 23 Jul 2010 10:36:00 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2010/07/23/tip-fixing-vsperfaspnetcmd-metabase-errors/</guid>
      <description><![CDATA[VSPerfASPNetCmd is a new Visual Studio 2010 tool that helps you profile ASP.Net websites from the...]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdn.microsoft.com/en-us/library/ee308442.aspx">VSPerfASPNetCmd</a> is a new Visual Studio 2010 tool that helps you profile ASP.Net websites from the command-line. Recently I noticed an error message which didn&rsquo;t cover one common situation so I thought I&rsquo;d write about it. Here&rsquo;s an example:</p>
<p>&gt; VSPerfASPNetCmd.exe <a href="https://localhost">https://localhost</a> <br /><span style="font-family: Courier New; font-size: x-small;">Microsoft (R) VSPerf ASP.NET Command, Version 10.0.0.0 <br />Copyright (C) Microsoft Corporation. All rights reserved. </span></p>
<p><span style="font-family: Courier New; font-size: x-small;">Error <br />VSP 7008: ASP.net exception: "The website metabase contains unexpected information or you do not have permission to access the metabase.&nbsp; You must be a member of the Administrators group on the local computer to access the IIS metabase. Therefore, you cannot create or open a local IIS Web site.&nbsp; If you have Read, Write, and Modify Permissions for the folder where the files are located, you can create a file system web site that points to the folder in order to proceed."</span></p>
<p>The information in the error is correct and it is worth checking to make sure that you are running from an elevated command prompt, but it does miss a common configuration issue. In order to query for information from the IIS metabase, certain IIS components need to be installed.</p>
<p>To check this in Windows 7:</p>
<ol>
<li>Open &lsquo;Control Panel\Programs\Programs and Features&rsquo; (or run &lsquo;appwiz.cpl&rsquo;). </li>
<li>Choose &lsquo;Turn Windows features on or off&rsquo;. </li>
<li>In the &lsquo;Internet Information Services&rsquo; section, make sure that the following options are selected. </li>
</ol>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/7723.iis_config_7FC5EC7F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-83-21-metablogapi/7723.iis_5F00_config_5F00_7FC5EC7F.png"></a> </p>
<p style="text-align: center;"><img height="781" width="455" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/83/21/metablogapi/0207.iis_config_thumb_73C3FC4B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-83-21-metablogapi/0207.iis_5F00_config_5F00_thumb_5F00_73C3FC4B.png" alt="IIS Configuration Options" border="0" title="IIS Configuration Options" style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" /></p>
<p>The non-default options include:</p>
<ul>
<li>IIS 6 Scripting Tools </li>
<li>IIS 6 WMI Compatibility </li>
<li>IIS Metabase and IIS 6 configuration compatibility </li>
<li>ASP.NET, </li>
<li>Windows Authentication </li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>VS2010: Profiler Guidance (rules) Part 1</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/vs2010-profiler-guidance-rules-part-1</link>
      <pubDate>Thu, 25 Feb 2010 16:06:15 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2010/02/25/vs2010-profiler-guidance-rules-part-1/</guid>
      <description><![CDATA[The new guidance feature in the VS2010 profiler will look familiar to people who have used the...]]></description>
      <content:encoded><![CDATA[<p>The new guidance feature in the VS2010 profiler will look familiar to people who have used the <a href="https://msdn.microsoft.com/en-us/library/3z0aeatx(VS.100).aspx">static code analysis tools</a> in previous versions. However, instead of statically analyzing your code, the profiler runs it and analyzes the results to provide guidance to fix some common performance issues.</p>  <p>Probably the best way to introduce this feature is via an example. Let’s assume you have written a simple application as follows:</p>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">using</span> System;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> <span style="color: #0000ff">namespace</span> TestApplication</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> {</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     <span style="color: #0000ff">class</span> Program</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     {</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>         <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>         {</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>             BadStringConcat();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>         }</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>&#160; </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>         <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> BadStringConcat()</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>         {</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>             <span style="color: #0000ff">string</span> s = <span style="color: #006080">&quot;Base &quot;</span>;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>             <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 10000; ++i)</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>             {</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>                 s += i.ToString();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>             }</pre>
<!--CRLF--><!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  18:</span>         }</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  19:</span>     }</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  20:</span> }</pre>
<!--CRLF--></div>
</div>

<p>If you profile this application in Sampling Mode you’ll see an Action Link called ‘View Guidance’ on the Summary Page:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/actionlinks_guidance_4.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/actionlinks_guidance_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Action Links View Guidance" border="0" alt="Action Links View Guidance" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/actionlinks_guidance_thumb_1.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/actionlinks_guidance_thumb_1.png" width="202" height="100" /></a> </p>

<p>Clicking on this link brings up the Error List, which is where you would also see things like compiler errors and static code analysis warnings:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_concat_6.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_concat_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Error List String.Concat" border="0" alt="Error List String.Concat" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_concat_thumb_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_concat_thumb_2.png" width="636" height="159" /></a> 

  <br /><em>DA0001: System.String.Concat(.*) = 96.00; Consider using StringBuilder for string concatenations.</em></p>

<p>As you can see there is a 1 warning, which is DA0001, warning about excessive usage of String.Concat. The number 96.00 is the percentage of inclusive samples in this function.</p>

<p>Double-clicking on the warning in the Error List switches to the <a href="https://blogs.msdn.com/colinth/archive/2010/01/18/vs2010-investigating-a-sample-profiling-report-function-details.aspx">Function Details View</a>. Navigating up one level of callers, we see that BadStringConcat is calling Concat (96% of Inclusive Samples) and doing some work itself (4%). The String.Concat call is not a direct call, but looking at the Function Code View you can see a ‘+=’ call on a string triggers the call.

  <br />&#160;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/function_details_concat_4.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/function_details_concat_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Function Details Concat" border="0" alt="Function Details Concat" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/function_details_concat_thumb_1.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/function_details_concat_thumb_1.png" width="746" height="700" /></a> </p>

<p>&#160;</p>

<p></p>

<p></p>

<p></p>

<p></p>

<p>The DA0001 rule suggests fixing the problem by changing the string concatenation to use a StringBuilder but I’ll leave that up to the reader. Instead, I’ll cover some of the other aspects of rules. </p>

<p>One of the more important questions is what to do if you wish to turn off a given rule (or even all rules)? The answer is to open up the ‘Tools/Options’ dialog and in the Performance section, navigate to the new ‘Rules’ subsection:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/rules_options_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/rules_options_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="rules_options" border="0" alt="rules_options" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/rules_options_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/rules_options_thumb.png" width="747" height="430" /></a> </p>

<p>Here you can see that I’ve started searching by typing ‘st’ in the search box at the top. This dialog can be used to turn off rules (by clicking on the checkboxes on the left), or to change rule categories to ‘Warning’, ‘Information’ or ‘Error’. The only affect is to change how the rule is displayed in the Error List.</p>

<p>If you have a situation where you are sharing a profiler report (VSP file) with team members, sometimes it might be useful to let them know that a warning is not important or has already been considered. In this case you can right-click on the Error List and choose ‘Suppress Message’.</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppress_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppress_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="errorlist_suppress" border="0" alt="errorlist_suppress" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppress_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppress_thumb.png" width="657" height="287" /></a> </p>

<p>The rule warning is crossed out and you can choose to save the VSP file so that the next time it is opened, the suppression is shown:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppressed_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppressed_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="errorlist_suppressed" border="0" alt="errorlist_suppressed" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppressed_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilerGuidancerules_C532/errorlist_suppressed_thumb.png" width="657" height="150" /></a> </p>

<p></p>

<p>&#160;</p>

<p>That’s it for now. I plan on covering a little more about rules in a future post, including more details about the rules themselves, how you can tweak thresholds and even write your own rules.</p>]]></content:encoded>
    </item>
    <item>
      <title>VS2010: Profiling In Progress (PIP)</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/vs2010-profiling-in-progress-pip</link>
      <pubDate>Thu, 04 Feb 2010 11:32:20 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2010/02/04/vs2010-profiling-in-progress-pip/</guid>
      <description><![CDATA[With Visual Studio 2010 we want to make it clearer when you are profiling your application within...]]></description>
      <content:encoded><![CDATA[<p>With Visual Studio 2010 we want to make it clearer when you are profiling your application within the Visual Studio IDE. To accomplish this we added a new control which we call ‘Profiling In Progress’ or PIP, which we show when you launch the profiler or attach the profiler to a running application.</p>  <p>Our goal was to show something simple and lightweight while profiling and to make a few simple operations possible. PIP in VS2010 is shown below:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_1_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_1_2.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="pip_1" border="0" alt="pip_1" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_1_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_1_thumb.png" width="505" height="294" /></a><em>Currently profiling. Pause profiling. Stop profiling or exit the application to generate a report.</em> </p>  <p>The progress/spin control indicates that the UI is responding and there are two links:</p>  <ul>   <li>Pause profiling, which changes to ‘Resume profiling’ when clicked. This has the same effect as clicking on the ‘Pause profiling’ button in the Performance Explorer. </li>    <li>Stop profiling, which kills the application and finishes profiling. </li> </ul>  <p>After profiling completes, PIP changes to show that we are about to open the report.</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_2_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_2_2.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="pip_2" border="0" alt="pip_2" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_2_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010ProfilingInProgressPIP_108BF/pip_2_thumb.png" width="505" height="294" /></a><em> Preparing to open report… This might take a while if your symbol server is slow or not responding.</em></p>]]></content:encoded>
    </item>
    <item>
      <title>VS2010: Investigating a sample profiling report (Function Details)</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/vs2010-investigating-a-sample-profiling-report-function-details</link>
      <pubDate>Mon, 18 Jan 2010 17:42:55 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2010/01/18/vs2010-investigating-a-sample-profiling-report-function-details/</guid>
      <description><![CDATA[I’ve already discussed how the new profiler summary page makes it easier to discover and fix...]]></description>
      <content:encoded><![CDATA[<p>I’ve already discussed how the <a href="https://blogs.msdn.com/colinth/archive/2009/12/31/vs2010-new-profiler-summary-page.aspx">new profiler summary page</a> makes it easier to discover and fix performance issues, but sometimes a little more investigation is required. This time I’m going to drill in with another new VS2010 feature called the Function Details View.</p>  <p>I’m going to use PeopleTrax application again, which you can <a href="https://code.msdn.microsoft.com/VSTS2010B1PeopleTrax">download from CodeBox</a>. I have a report which I collected earlier using the Sampling method of profiling, since the application appears to be CPU bound (at least on a single core).</p>  <p>In this report I take a look at the Hot Path and see that People.GetNames is calling two hot functions ‘StringReader.ReadLine()’ and ‘String.Trim()’.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/1_summary_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/1_summary_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="1_summary" border="0" alt="1_summary" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/1_summary_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/1_summary_thumb.png" width="700" height="520" /></a> </p>  <p>I’d like to see where these expensive calls are in my code so I click on GetNames (shown in purple above) to bring up the new Function Details view.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/2_function_details_splitscreen_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/2_function_details_splitscreen_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2_function_details_splitscreen" border="0" alt="2_function_details_splitscreen" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/2_function_details_splitscreen_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/2_function_details_splitscreen_thumb.png" width="510" height="480" /></a> </p>  <p>There are a few things to note about this new view.</p>  <ul>   <li>The title at the top is for People.GetNames().</li>    <li>There is a dropdown to switch between ‘Inclusive Samples %’ and ‘Inclusive Samples’</li>    <li>There are some blue boxes showing callers and callees (I’ll cover this more later).</li>    <li>The code is shown with hot lines and an annotated margin.</li> </ul>  <p>In the default view we would need to drag the splitter (shown in purple) to see all of the boxes. Instead, we can use the toolbar option to ‘Split Screen Vertically’, also highlighted in purple.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/3_function_details_splitscreen2_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/3_function_details_splitscreen2_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="3_function_details_splitscreen2" border="0" alt="3_function_details_splitscreen2" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/3_function_details_splitscreen2_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/3_function_details_splitscreen2_thumb.png" width="700" height="420" /></a> </p>  <p>Now we can clearly see where the calls to ReadLine() and Trim() are in the code on the right-hand side. There is also a metrics table in the ‘Function Performance Details’ section and there are some related links.</p>  <p>At this point, let’s look at the blue boxes. The left-hand box shows the callers of this function. The height of the box represents the relative cost for the metric that is currently chosen (in this case Inclusive Samples). Since we have a single caller, it takes up the entire box.</p>  <p>On the right we have another blue box that contains several sections:</p>  <ul>   <li>Function Body (87 samples). The height of this box represents the relative number of samples in the body itself (Exclusive Samples).</li>    <li>ReadLine (727 samples). This is the function with the most Inclusive Samples. Again, the height is proportional so it is also the biggest box.</li>    <li>Trim (642 samples). The function with the second most Inclusive Samples. Slightly smaller height.</li>    <li>Other functions with smaller sample counts.</li> </ul>  <p>Each of these boxes (aside from Function Body) is clickable, allowing navigation of the Caller/Callees.</p>  <p>Looking at the code I can’t see an easy way to simplify it and I don’t control either Trim() or ReadLine(), so now let’s navigate one level up in the callers by clicking on GetPeople.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/6_function_details_clickable_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/6_function_details_clickable_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="6_function_details_clickable" border="0" alt="6_function_details_clickable" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/6_function_details_clickable_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/6_function_details_clickable_thumb.png" width="294" height="318" /></a> </p>  <p>Clicking causes us to navigate to the GetPeople Function Details view:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/7_function_details_navigate_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/7_function_details_navigate_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="7_function_details_navigate" border="0" alt="7_function_details_navigate" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/7_function_details_navigate_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010Investigatingasampleprofilingrepor_DB38/7_function_details_navigate_thumb.png" width="700" height="455" /></a> </p>  <p></p>  <p></p>  <p>From the code on the right-hand side we can see that in the two highlighted calls to GetNames 89.2% of the samples are occurring. From the loop structure it seems like it would be a good idea to avoid making these GetNames calls inside the for loop. Followers of the PeopleTrax application will notice that this is the first optimization suggestion for this application – cache the GetNames calls in the constructor. The next step in this investigation would be to change the code, collect another profile and compare the reports, but I’ll leave that up to you.</p>  <p><strong>NOTE:</strong> line-level information is only available for sample-profiling. Since this information is not available in Instrumentation mode, highlighting and margin annotation is also not available for Instrumentation mode.</p>]]></content:encoded>
    </item>
    <item>
      <title>VS2010: New Profiler Summary Page</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/vs2010-new-profiler-summary-page</link>
      <pubDate>Thu, 31 Dec 2009 14:16:20 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2009/12/31/vs2010-new-profiler-summary-page/</guid>
      <description><![CDATA[With Visual Studio 2010 we want to make it easier for customers to find and fix performance issues...]]></description>
      <content:encoded><![CDATA[<p>With Visual Studio 2010 we want to make it easier for customers to find and fix performance issues with their code. One of the first things we looked at was the view that shows up after profiling an application – the Summary Page.    <br /></p>  <p>I’ll describe a few features of the new summary page using the PeopleTrax application, which you can <a href="https://code.msdn.microsoft.com/VSTS2010B1PeopleTrax">download from CodeBox</a>. I won’t describe collecting the profiling data since this is already <a href="https://msdn.microsoft.com/en-us/library/ms182398(VS.100).aspx">covered on MSDN</a>. The summary page for a sample profiling run is shown below.</p>  <p align="left"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/summary_sampling_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/summary_sampling_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="summary_sampling" border="0" alt="summary_sampling" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/summary_sampling_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/summary_sampling_thumb.png" width="800" height="628" /></a> </p>  <p>I’ll describe the individual pieces of the report below:</p>  <ul>   <li>The header shows the type of data collected (Sample, Instrumentation, etc.) and also how many samples were collected.      <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__header_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__header_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="sampling__header" border="0" alt="sampling__header" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__header_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__header_thumb.png" width="226" height="50" /></a>       <br /></li>    <li>The hot path is shown right on the front page.      <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__hotpath_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__hotpath_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sampling hotpath" border="0" alt="sampling hotpath" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__hotpath_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__hotpath_thumb.png" width="702" height="170" /></a>&#160; <br />We can see straight away that the ReadLine() function is an interesting function to look at. Clicking on the hyperlink will take you directly to the Function Details page. There are also related views links to navigate directly to the ‘Call Tree’ and ‘Functions’ views.       <br /></li>    <li>Functions that are doing the most individual work (have the highest Exclusive Samples) are listed with visual ‘sparklines’ (bar charts) to indicate relative importance.      <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__exclusive_functions_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__exclusive_functions_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sampling exclusive functions" border="0" alt="sampling exclusive functions" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__exclusive_functions_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__exclusive_functions_thumb.png" width="702" height="155" /></a>       <br />Clicking on the hyperlink for a function takes you directly to the Function Details page for that function.       <br /></li>    <li>Notifications that change based on the state of the report are shown in a new ‘Notifications’ area. In the example below, clicking Show All Code will reanalyze the report with Just My Code turned off. ‘View Guidance’ will bring up the Error List to display guidance from the new Rules and Guidance profiler feature.     <br />&#160;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__notifications_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__notifications_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; vertical-align: top; border-top: 0px; margin-right: 0px; border-right: 0px" title="sampling notifications" border="0" alt="sampling notifications" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__notifications_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__notifications_thumb.png" width="199" height="94" /></a>      <br /></li>    <li>Action links are shown in the ‘Report’ area and they do not depend on the state of the report. One useful link we added is ‘Toggle Full Screen’ which shows the report in full-screen mode.     <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__actions_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__actions_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="sampling actions" border="0" alt="sampling actions" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__actions_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__actions_thumb.png" width="201" height="234" /></a>       <br /></li>    <li>A chart of CPU usage (for sampling, although we also show contention data in Concurrency mode) enables filtering of the report data. Highlight a region on the chart and choose ‘Filter by selection’ to show data from only that period of time. For example, with the chart below it may be useful to filter between 16 and 24 seconds.     <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__chart_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__chart_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sampling chart" border="0" alt="sampling chart" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__chart_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__chart_thumb.png" width="702" height="237" /></a>       <br /></li>    <li>At the top of the report above the header, we still have the profiler toolbar which is useful for navigating (see the left and right arrows and also the dropdown for jumping between views) and for executing some of the actions that are also listed on the Summary Page.     <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__toolbar_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__toolbar_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sampling toolbar" border="0" alt="sampling toolbar" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__toolbar_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/VS2010NewProfilerSummaryPage_C09C/sampling__toolbar_thumb.png" width="567" height="25" /></a>&#160;</li> </ul>  <p>Hopefully these new features on the front page will make it quicker and easier than ever to diagnose your performance issues.</p>]]></content:encoded>
    </item>
    <item>
      <title>VS2010: Using the keyboard to profile an application (Alt-F2 shortcut)</title>
      <link>https://docs.microsoft.com/archive/blogs/colinth/vs2010-using-the-keyboard-to-profile-an-application-alt-f2-shortcut</link>
      <pubDate>Tue, 29 Dec 2009 11:13:00 GMT</pubDate>
      <dc:creator><![CDATA[Colin Thomsen - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/colinth/2009/12/29/vs2010-using-the-keyboard-to-profile-an-application-alt-f2-shortcut/</guid>
      <description><![CDATA[In announcing the Visual Studio Beta 2 profiler features, Chris mentioned that we have a new option...]]></description>
      <content:encoded><![CDATA[<P>In announcing the Visual Studio Beta 2 profiler features, Chris <A href="https://blogs.msdn.com/profiler/archive/2009/10/22/visual-studio-2010-beta-2-available-now.aspx" mce_href="https://blogs.msdn.com/profiler/archive/2009/10/22/visual-studio-2010-beta-2-available-now.aspx">mentioned</A> that we have a new option on the Debug menu called ‘Start Performance Analysis’ which has the Alt-F2 keyboard shortcut. This makes it easier than ever to start profiling your application. The new menu item has the following behavior:</P>
<UL>
<LI>You must have a Visual Studio Solution open in order to enable it. </LI>
<LI>If you have a solution open, but do not have a launchable current performance session, Start Performance Analysis launches the Performance Wizard. </LI>
<LI>If you have a solution open and have a launchable current performance session, Start Performance Analysis starts profiling. </LI></UL>
<P>Let’s use this new functionality to profile an application that I prepared earlier.</P>
<OL>
<LI>Open the solution with ‘Alt-F, J, Enter’: <BR><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/1_open_project_4.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/1_open_project_4.png" mce_href="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/1_open_project_4.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=1_open_project border=0 alt=1_open_project src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/1_open_project_thumb_1.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/1_open_project_thumb_1.png" width=642 height=369 mce_src="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/1_open_project_thumb_1.png"></A>&nbsp; </LI>
<LI>Start Performance Analysis with ‘Alt-F2’, which brings up the wizard: <BR><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/2_alt-f2_wizard_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/2_alt-f2_wizard_2.png" mce_href="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/2_alt-f2_wizard_2.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=2_alt-f2_wizard border=0 alt=2_alt-f2_wizard src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/2_alt-f2_wizard_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/2_alt-f2_wizard_thumb.png" width=560 height=480 mce_src="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/2_alt-f2_wizard_thumb.png"></A> </LI>
<LI>&nbsp; Press ‘Enter’ to choose the default ‘CPU Sampling’ profiling method and move to the target selection page: <BR><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/3_enter_next_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/3_enter_next_2.png" mce_href="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/3_enter_next_2.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=3_enter_next border=0 alt=3_enter_next src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/3_enter_next_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/3_enter_next_thumb.png" width=560 height=480 mce_src="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/3_enter_next_thumb.png"></A>&nbsp; </LI>
<LI>Press ‘Enter’ to select the only launchable project in the solution and move to final wizard page: <BR><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/4_enter_finish_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/4_enter_finish_2.png" mce_href="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/4_enter_finish_2.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=4_enter_finish border=0 alt=4_enter_finish src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/4_enter_finish_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/4_enter_finish_thumb.png" width=560 height=480 mce_src="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/4_enter_finish_thumb.png"></A> </LI>
<LI>Press ‘Enter’ to finish the wizard and start profiling: <BR><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/5_profiling_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/5_profiling_2.png" mce_href="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/5_profiling_2.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=5_profiling border=0 alt=5_profiling src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/5_profiling_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/5_profiling_thumb.png" width=640 height=311 mce_src="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/5_profiling_thumb.png"></A> </LI>
<LI>The report will open when profiling finishes: <BR>&nbsp;<A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/6_report_2.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/6_report_2.png" mce_href="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/6_report_2.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=6_report border=0 alt=6_report src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/6_report_thumb.png" original-url="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/6_report_thumb.png" width=600 height=503 mce_src="https://blogs.msdn.com/blogfiles/colinth/WindowsLiveWriter/Usingthekeyboardtoprofileanapplication_9BB8/6_report_thumb.png"></A> </LI></OL>
<P mce_keep="true">&nbsp;</P>
<P>If you wish to profile again, selecting Alt-F2 will start profiling with the Performance Session that was created after step #4.</P>]]></content:encoded>
    </item>
  </channel>
</rss>