<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>CREATE DATABASE</title><link>http://blogs.msdn.com/b/gauravbi/</link><description>Quest in Database design</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>SQL Server performance tuning methodology</title><link>http://blogs.msdn.com/b/gauravbi/archive/2007/11/22/sql-server-performance-tuning-methodology.aspx</link><pubDate>Thu, 22 Nov 2007 18:00:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6461566</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=6461566</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2007/11/22/sql-server-performance-tuning-methodology.aspx#comments</comments><description>&lt;p&gt;Over next few posts I am going to talk about "a" methodology to do performance assessment / tuning of SQL Server based applications. Main focus will be on SQL Server engine but wherever necessary references to changes needed in application code (non T-SQL, non schema based, non configuration options etc.) will be made. I would love to hear your thoughts and comments on this.  &lt;p&gt;&amp;nbsp; &lt;p&gt;SQL Server performance issues show up in following categories –  &lt;ol&gt; &lt;li&gt;Increased utilization of resources – This condition happens when SQL Server starts consuming more resources – CPU, IO, memory, network bandwidth etc. even when the workload has not changed much.  &lt;li&gt;Slow response time – Application which was running within user &lt;i&gt;expected&lt;/i&gt; time&lt;i&gt; &lt;/i&gt;start running slowly even when the workload has not changed much.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Basic essential information&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Before starting performance investigation it is necessary to collect basic information about the machine.  &lt;ul&gt; &lt;li&gt;Hardware – CPU, memory, Disk layout – physical / logical, network bandwidth  &lt;li&gt;Other applications running on the system  &lt;li&gt;SQL Server configuration – sp_configure  &lt;li&gt;Database, transaction log, TempDB files layout.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Resource bottleneck&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Typical resources which can become bottleneck in SQL Server set up are –  &lt;ul&gt; &lt;li&gt;CPU  &lt;li&gt;Memory  &lt;li&gt;Disk I/O  &lt;li&gt;Network  &lt;li&gt;TempDB&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;We will look at these various resources to understand why it has become bottleneck and what can be done to reduce its impact.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6461566" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/Performance/">Performance</category></item><item><title>Workload</title><link>http://blogs.msdn.com/b/gauravbi/archive/2007/11/19/workload.aspx</link><pubDate>Mon, 19 Nov 2007 18:00:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6330247</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=6330247</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2007/11/19/workload.aspx#comments</comments><description>&lt;p&gt;I believe for any performance investigation you need to have a scenario. Something which is believable and real world like. In my opinion scenarios drive requirements and design.&lt;/p&gt; &lt;p&gt;I want to have a workload which I can use to test and demonstrate various capabilities of SQL Server database. Why I am doing it you may ask? Over the years SQL Server has grown to be such a huge product that it is impossible to keep track of all the things you can do with it. There are tons of books, online articles, white papers, suggestions, tips for getting best performance out of SQL Server. Most of these are very disjointed and keeping track of them is proving impossible for me. So what I want to do is to start with one system and see how these scenarios apply to this system and what should be done to get the best of SQL Server.&lt;/p&gt; &lt;p&gt;I am going to start with "a" workload and start testing various suggestions on it. See how well these suggestions apply to this workload.&lt;/p&gt; &lt;p&gt;Here are the requirements of the workload off the top of my head -&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Scalable. &lt;/strong&gt;The workload should be able to scale from running on a small desktop level machine (dual core 2 GB RAM with one physical hard disk) to a decent commodity server (four socket quad core 16 GB 6 physical disk) class machine.  &lt;li&gt;&lt;strong&gt;Real life like. &lt;/strong&gt;Should represent a real life scenario. Amazon.com model comes to mind.  &lt;li&gt;&lt;strong&gt;Reproducible / Predictable. &lt;/strong&gt;Should reproduce the same results no matter how many times it is executed. For a performance validation, being able to reproduce a scenario is very important.  &lt;li&gt;&lt;strong&gt;Shippable. &lt;/strong&gt;The workload should be able to zip into a small download so that anyone can reproduce the workload on his / her machine.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Other requirements that are good to have but not necessary a deal breaker are -&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Able to execute from 2 machine set up. I would prefer not to have a application server layer just to keep things simple.  &lt;li&gt;Ability to capture performance metrics. Sure one can keep track of individual tests and the performance data using text files, word documents. But it would nice to have a system to keep track of all the tests and corresponding results.  &lt;li&gt;Ability to run on other commercial database systems. I am not targeting any other database system than SQL Sever 2005 and future versions of SQL Server. But if I can can have a database agnostic workload, that would be sweet.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;What do you guys think the requirements of this workload should be? Anything else comes to mind? &lt;/p&gt; &lt;p&gt;If there is anything already available like this please point me to it. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6330247" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/Performance/">Performance</category></item><item><title>Analyzing Common CLR Performance Problems</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/09/27/774956.aspx</link><pubDate>Thu, 28 Sep 2006 08:56:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:774956</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=774956</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/09/27/774956.aspx#comments</comments><description>&lt;p&gt;Here's an &lt;a href="http://blogs.msdn.com/akhune/archive/2004/06/11/153734.aspx" target="_blank"&gt;old document&lt;/a&gt; on analyzing memory problems. Here's summary -&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;This document is intended to help you diagnose common CLR performance issues. Over the years we have seen a wide variety of CLR performance issues from our customers. This document tries to classify these issues in broad categories and provide guidance for each class of problems. Many facts mentioned in this document hold for the CLR versions V1.0 and V1.1. If there are differences in behavior between these two versions then they are called out. V2.0 behavior, if documented here, is subject to change.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I think there have been some updates to this document. I'll try to dig out links to this.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=774956" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/CLR+Performance/">CLR Performance</category></item><item><title>Performance Hit of using BitArray.GetEnumerator()</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/09/12/751341.aspx</link><pubDate>Wed, 13 Sep 2006 03:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:751341</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=751341</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/09/12/751341.aspx#comments</comments><description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;While doing memory analysis on one of my scenarios, I noticed that System.Collections.BitArray.BitArrayEnumeratorSimple::get_Current Object () is doing lot of allocations of System.Boolean object. 
&lt;P&gt;I wrote a simple program to reproduce the behavior and as it turns out, for BitArray object returning an enumerator by calling foreach operator does allocate a lot of memory. In a simple test of 1000 entries in BitArray object, enumerating over the entries 1000 times resulted in 11,767,392 bytes of allocations for 980,616 instances of System.Boolean object. The total allocations for the scenario were 11.49 MB. The total time for executing the scenario was 35.120 ms. 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;bool b;&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;BitArray newBitArray = new BitArray(1000, false);&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;for (int j = 0; j &amp;lt; 1000; j++)&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;{&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;foreach (bool b2 in newBitArray)&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = b2;&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I changed the code to access the properties based on index rather than getting enumerator over the BitArray object. The allocations to System.Boolean object disappeared and the total allocations for the scenario reduced to 23.52kB. The time for execution came down to 8.189 ms. 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;bool b;&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;BitArray newBitArray = new BitArray(1000, false);&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;for (int j = 0; j &amp;lt; 1000; j++)&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;{&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;for (int i = 0; i &amp;lt; newBitArray.Count; i++)&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = newBitArray[i];&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So there you go. Watch for BitArray.GetEnumerator() in your code. 
&lt;P&gt;In case you are wondering, I used CLR Profiler for analysis. You can download this for free from &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A362781C-3870-43BE-8926-862B40AA0CD0&amp;amp;displaylang=en" target=_blank&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Update&lt;/U&gt;: Added file for sample program&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=751341" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-00-75-13-41/Program_2E00_cs" length="2839" type="text/plain" /><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/CLR+Performance/">CLR Performance</category></item><item><title>Named Value Collections slower than HashTable</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/09/10/747990.aspx</link><pubDate>Sun, 10 Sep 2006 21:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:747990</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=747990</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/09/10/747990.aspx#comments</comments><description>&lt;P&gt;Kim Hamilto on BCL team has written a &lt;A href="http://blogs.msdn.com/bclteam/archive/2006/09/05/741660.aspx" target=_blank&gt;great post&lt;/A&gt; on performance differences in Named Value Collections and Hashtable.&lt;/P&gt;
&lt;P&gt;Lookups scale pretty well except that Named Value Collections is 2.6x worse.&amp;nbsp;Addition also scales very well but this time Named Value Collections is 8.5x worse. He explains -&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;What causes the additional overhead for NameValueCollection? NameValueCollection allows a key to be associated with one or more values. So the additional cost is caused by the way lookups are performed internally: NameValueCollection actually delegates the hash key lookups to an internal Hashtable, which may contain multiple entries associated with that key.&lt;/P&gt;
&lt;P&gt;If there are multiple entries associated with the key, it will return them appended together. So in fact, if you’ve assigned multiple entries to the same key (the trials above did not), then the lookup cost will be linear in the number of items you’ve assigned to the key, because the accessor will append them together. This is demonstrated in the following NameValueCollection.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The remove operation is worse of the three and does not scale. Here's explanation - 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;For NameValueCollection, the cost of removes is linear in the size of the collection, caused by the need to shift the index-based lookup array. Note that this means NameValueCollection and Hashtable have different asymptotic behavior for removes.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Here's recommendations on use of these data structures - 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;NameValueCollection only accepts keys and values that are Strings, so this is a very specialized collection. It’s useful in a situation in which you either need to associate multiple values with a key, or to do hash-based lookups as well as lookup by index (and hopefully not perform too many removes). 
&lt;P&gt;However, if you need to store string key/value pairs and you don’t need to perform index-based lookups or associate multiple values with a key, you may prefer to use the generic Dictionary class. This has the same asymptotic behavior as Hashtable in all cases and furthermore avoids any costs due to boxing.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=747990" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/CLR+Performance/">CLR Performance</category></item><item><title>Read Performance Counters without non-admin privileges</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/09/09/747966.aspx</link><pubDate>Sat, 09 Sep 2006 20:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:747966</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=747966</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/09/09/747966.aspx#comments</comments><description>&lt;p&gt;Ryan Byington has written an &lt;a href="http://blogs.msdn.com/bclteam/archive/2006/09/08/746900.aspx" target="_blank"&gt;entry&lt;/a&gt; on changes needed for reading performance counters data when logged as non-admin on the box. Basically the change required needs adding yourself to Performance Monitor Users group. For accessing performance counter on remote machine -&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;On Windows 2003, Windows XP x64 Edition, and Vista you still must be part of the Performance Monitor Users group on the remote machine but there is a problem with the PerformanceCounter class where it tries to read some registry keys on the remote machine that a non admin users do not have access to. To give your user read access to these keys without having to be an admin on the remote machine complete the following steps on the remote machine:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Open the Registry Editor by going to the Start Menu and selecting Run…, then type “regedit”, and click the OK button.  &lt;li&gt;Navigate to the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg registry key.  &lt;li&gt;Right click on the "winreg" key and select Permissions. Add users or groups to which you want to grant Read access.  &lt;li&gt;Exit Registry Editor and restart Windows. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;For more explanation on this process see &lt;a href="http://support.microsoft.com/?kbid=153183"&gt;http://support.microsoft.com/?kbid=153183&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=747966" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/Configuration/">Configuration</category></item><item><title>Understand problem before you try to find a solution</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/09/04/740027.aspx</link><pubDate>Mon, 04 Sep 2006 22:58:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:740027</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=740027</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/09/04/740027.aspx#comments</comments><description>&lt;p&gt;Maoni has written a&amp;nbsp;&lt;a href="http://blogs.msdn.com/maoni/archive/2006/09/01/734880.aspx" target="_blank"&gt;good insight&lt;/a&gt;&amp;nbsp;on process to identify performance issues.  &lt;blockquote&gt; &lt;p&gt;I’ve seen enough people who looked really hard at some performance counters (often not correct ones) or some other data and asked tons of questions such as “is this allocation rate too high? It looks too high to me.” or “my gen1 size is too big, right? It seems big…”, &lt;b&gt;before&lt;/b&gt; they have enough evidence to even justify such an investigation and questions. &lt;p&gt;For people who are required to investigate performance related issues, especially when the deadline is close, my advice is “understand the problem before you try to find a solution”. Determine what to look at based on evidence, not based on your lack of knowledge in the area unless you already exhausted areas that you do know about. Before you ask questions related to GC, ask yourself if you think GC is actually the problem. If you can’t answer that question it really is not a good use of your time to ask questions related to GC.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;She brings up two fundamentals  &lt;ol&gt; &lt;li&gt;Having knowledge about fundamentals - memory and CPU really helps.&lt;/li&gt; &lt;li&gt;Knowing what your performance requirements are is a must.&lt;/li&gt;&lt;/ol&gt; &lt;blockquote&gt; &lt;p&gt;When you’ve decided that there is a problem, dig into it instead of guess what might be wrong. Example - If your app is using too much memory, look at who is using the memory. If you’ve decided that the managed heap is using too much memory, look at why. Managed heap using too much memory generally means you survive too much in your app. Look at what is holding on to those survivors.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=740027" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/Performance/">Performance</category></item><item><title>Excel hack - Graphical representation of data</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/08/29/731074.aspx</link><pubDate>Wed, 30 Aug 2006 06:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:731074</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=731074</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/08/29/731074.aspx#comments</comments><description>&lt;p&gt;Ever wanted to see data visually in excel without going through the complex wizard? Juice analysis has posted one of the neatest hacks to get graphical representation of data. &lt;/p&gt; &lt;p&gt;&lt;img class="postimg center" height="117" alt="excel_rept2.gif" src="http://lifehacker.com/assets/resources/2006/08/excel_rept2.gif" width="475"&gt;&lt;/p&gt; &lt;p&gt;The hack uses simple function REPT.&lt;/p&gt; &lt;p&gt;Microsoft Excel 12 has similar functionality and is super easy to use.&lt;/p&gt; &lt;p&gt;See &lt;a href="http://www.juiceanalytics.com/weblog/?p=236"&gt;Lightweight data exploration in Excel&lt;/a&gt;&amp;nbsp;for more detail.&lt;/p&gt; &lt;p&gt;This gets even better look at &lt;a href="http://www.juiceanalytics.com/weblog/?p=239"&gt;More on Excel in-cell graphing&lt;/a&gt;&amp;nbsp;has additional information on this hack. They even have a great &lt;a href="http://www.juiceanalytics.com/downloads/Excel%20in-cell%20graphing%20ideas.xls" target="_blank"&gt;excel sheet&lt;/a&gt; demonstrating all the hacks mentioned in this article.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=731074" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/Tools/">Tools</category></item><item><title>Performance Console</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/08/26/726075.aspx</link><pubDate>Sun, 27 Aug 2006 05:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:726075</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=726075</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/08/26/726075.aspx#comments</comments><description>&lt;p&gt;Ever got lost in reading the call stack trace from .NET profiler? I do in the recursive calls to functions. Other times I just want to get a feel of the application call stack to identify which areas should I be focusing on.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/joshwil/" target="_blank"&gt;Josh Williams&lt;/a&gt; has written an amazing tool to help you out here. &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5A04EE30-6259-4FAD-BF05-CCB72BE09B4A&amp;amp;displaylang=en" target="_blank"&gt;Performance Console&lt;/a&gt; starts where profiler ends. Once you have &lt;a href="http://blogs.msdn.com/joshwil/archive/2006/08/03/687783.aspx" target="_blank"&gt;exported data&lt;/a&gt; from profiler into .csv files (using command line or export functionality), you can point the tool to the directory and the tool will generate a nice output for you.&lt;/p&gt; &lt;p&gt;The command line is very intuitive and you can do operations like show me call stack for all the functions where inclusive time is more than 5% and BTW, collapse all the un interesting nodes (e.g. where symbols are not present).&lt;/p&gt; &lt;p&gt;I have been using this tool for a few weeks now&amp;nbsp;and believe me it has made my life so much simpler. It is certainly very useful in finding any regressions in the code.&lt;/p&gt; &lt;p&gt;So what does a developer dealing with unmanaged code do? Josh mentions in Rico's &lt;a href="http://blogs.msdn.com/ricom/archive/2006/08/03/688019.aspx" target="_blank"&gt;post&lt;/a&gt; introducing Performance Console that it works very well with unmanaged code as well.&lt;/p&gt; &lt;p&gt;Josh has written an &lt;a href="http://blogs.msdn.com/joshwil/archive/2006/08/04/688599.aspx" target="_blank"&gt;introduction&lt;/a&gt; to the tool but you need to read the (short but very useful) documentation that comes with the download.&lt;/p&gt; &lt;p&gt;Give it a try!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=726075" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/Tools/">Tools</category></item><item><title>CLR Profiler Team Blog</title><link>http://blogs.msdn.com/b/gauravbi/archive/2006/08/26/726070.aspx</link><pubDate>Sun, 27 Aug 2006 05:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:726070</guid><dc:creator>Gaurav Bindlish MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/gauravbi/rsscomments.aspx?WeblogPostID=726070</wfw:commentRss><comments>http://blogs.msdn.com/b/gauravbi/archive/2006/08/26/726070.aspx#comments</comments><description>&lt;p&gt;Check out the &lt;a href="http://blogs.msdn.com/profiler/" target="_blank"&gt;CLR Profiler team's blog&lt;/a&gt;. It is a collection for all the great articles profiler team is writing. Some of my favorites are -&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/ianhu/archive/2006/04/07/571050.aspx"&gt;VSTS FAQ&lt;/a&gt;&amp;nbsp;is great introduction on using profiler.&lt;/li&gt; &lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=46208"&gt;Using VSTS Performance Tools to Speed Up Your App (Part 1)&lt;/a&gt; is a great demo&lt;/li&gt; &lt;li&gt;&lt;a href="https://blogs.msdn.com/ianhu/archive/2005/06/09/427327.aspx" target="_blank"&gt;Greatest Hits&lt;/a&gt; is a great collection of articles about using profiler.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=726070" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/gauravbi/archive/tags/Tools/">Tools</category></item></channel></rss>