<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET (General)</title>
        <link>http://geekswithblogs.net/sdorman/category/4832.aspx</link>
        <description>General .NET 2.0 related topics.
</description>
        <language>en-US</language>
        <copyright>Scott Dorman</copyright>
        <managingEditor>sj_dorman@hotmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/us/</creativeCommons:license>
        <item>
            <title>Sams Teach Yourself Visual C# 2010 in 24 Hours</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/11/05/sams-teach-yourself-visual-c-2010-in-24-hours.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/SamsTeachYourselfVisualC2010in24Hours_143D1/0672331012_4.jpg" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="0672331012" border="0" alt="0672331012" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/SamsTeachYourselfVisualC2010in24Hours_143D1/0672331012_thumb_1.jpg" width="188" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I have &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/06/26/sams-teach-yourself-c-2010-in-24-hours.aspx"&gt;previously mentioned&lt;/a&gt; that I’m working on the upcoming &lt;u&gt;Sams Teach Yourself Visual C# 2010 in 24 Hours&lt;/u&gt; book.&lt;/p&gt;  &lt;p&gt;Things are progressing nicely, if a bit slower than I’d prefer. I have the draft for the cover art, which looks really good.&lt;/p&gt;  &lt;p&gt;I’m also very pleased to announce my technical editors – Claudio Lasaala and Eric Lippert.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://claudiolassala.spaces.live.com" target="_blank"&gt;Claudio&lt;/a&gt; is a Senior Developer at &lt;a href="http://eps-software.com/" target="_blank"&gt;EPS Software Corp&lt;/a&gt;. He has presented several lectures at Microsoft events such as PDC and various other Microsoft seminars, as well as several conferences and user groups across North America and Brazil. He is a multiple winner of the Microsoft MVP Award and also holds the MCSD for .NET certification. He has articles published on several magazines, such as MSDN Brazil Magazine, CoDe Magazine, UTMag, Developers Magazine, and FoxPro Advisor.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/ericlippert" target="_blank"&gt;Eric&lt;/a&gt; is a senior software design engineer at Microsoft has been working full time in the developer division since 1996, where he assisted with the design and implementation of VBScript, JScript, JScript.NET, Windows Script Host, Visual Studio Tools for Office and C#. &lt;/p&gt;  &lt;p&gt;I am looking forward to working with both Claudio and Eric through the technical editing process and getting this book completed and available, which should happen sometime early in 2010.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e2c1b31f-005e-4de6-99b5-352723dad9be" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Books" rel="tag"&gt;Books&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Sams+Teach+Yourself+C%23+2010" rel="tag"&gt;Sams Teach Yourself C# 2010&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136051"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136051" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/136051.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/11/05/sams-teach-yourself-visual-c-2010-in-24-hours.aspx</guid>
            <pubDate>Fri, 06 Nov 2009 04:01:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/136051.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/11/05/sams-teach-yourself-visual-c-2010-in-24-hours.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/136051.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/136051.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio 2010 Beta 2</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/10/19/visual-studio-2010-beta-2.aspx</link>
            <description>&lt;p&gt;Visual Studio 2010 Beta 2 is now available for &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;MSDN subscribers&lt;/a&gt;, and generally available on October 21. I haven’t had a chance yet to play around with it, but some of the CLR changes that are &lt;strong&gt;very&lt;/strong&gt; exciting to hear about are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The new &lt;a href="http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace(VS.100).aspx" target="_blank"&gt;String.IsNullOrWhiteSpace&lt;/a&gt; method indicates whether a string is null, empty, or consists only of white-space characters. &lt;/li&gt;    &lt;li&gt;New overloads have been added to the &lt;a href="http://msdn.microsoft.com/en-us/library/system.string.concat(VS.100).aspx" target="_blank"&gt;String.Concat&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.string.join(VS.100).aspx" target="_blank"&gt;String.Join&lt;/a&gt; methods that concatenate members of an &lt;a href="http://msdn.microsoft.com/en-us/library/9eekhta0(VS.100).aspx" target="_blank"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/a&gt; collections.&lt;/li&gt;    &lt;li&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/dd991828(VS.100).aspx" target="_blank"&gt;String.Concat&amp;lt;T&amp;gt;&lt;/a&gt; method lets you concatenate each element in an enumerable collection without first converting the elements to strings.&lt;/li&gt;    &lt;li&gt;The new &lt;a href="http://msdn.microsoft.com/en-us/library/system.enum.hasflag(VS.100).aspx" target="_blank"&gt;Enum.HasFlag&lt;/a&gt; method determines whether one or more bit fields or flags are set in an enumeration value. &lt;/li&gt;    &lt;li&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/dd991876(VS.100).aspx" target="_blank"&gt;Enum.TryParse&amp;lt;TEnum&amp;gt;&lt;/a&gt; method returns a Boolean value that indicates whether a string or integer value could be successfully parsed.&lt;/li&gt;    &lt;li&gt;You can now easily copy one stream into another with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.stream.copyto(VS.100).aspx" target="_blank"&gt;CopyTo&lt;/a&gt; method in classes that inherit from the &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.stream(VS.100).aspx" target="_blank"&gt;System.IO.Stream&lt;/a&gt; class.&lt;/li&gt;    &lt;li&gt;New &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.path.combine(VS.100).aspx" target="_blank"&gt;Path.Combine&lt;/a&gt; method overloads enable you to combine file paths.&lt;/li&gt;    &lt;li&gt;You can now parse &lt;a href="http://msdn.microsoft.com/en-us/library/system.guid(VS.100).aspx" target="_blank"&gt;System.Guid&lt;/a&gt; structures. &lt;/li&gt;    &lt;li&gt;The new &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.win32.registryoptions(VS.100).aspx" target="_blank"&gt;Microsoft.Win32.RegistryOptions&lt;/a&gt; enumeration lets you specify a volatile registry key that does not persist after the computer restarts.&lt;/li&gt;    &lt;li&gt;Registry keys no longer are restricted to a maximum length of 255 characters.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’m really looking forward to these improvements, particularly &lt;a href="http://msdn.microsoft.com/en-us/library/system.enum.hasflag(VS.100).aspx" target="_blank"&gt;Enum.HasFlags&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd991876(VS.100).aspx" target="_blank"&gt;Enum.TryParse&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace(VS.100).aspx" target="_blank"&gt;String.IsNullOrWhiteSpace&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.guid.tryparse(VS.100).aspx" target="_blank"&gt;Guid.TryParse&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/dd991142(VS.100).aspx" target="_blank"&gt;Path.Combine(string[])&lt;/a&gt;. Of course, since some of these weren’t in Beta 1 (at least as far as I saw), it means revising some of the chapters for my &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/06/26/sams-teach-yourself-c-2010-in-24-hours.aspx" target="_blank"&gt;book&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a70bc1ed-edf2-4fb9-846e-4a250de745b7" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio+2010" rel="tag"&gt;Visual Studio 2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Beta+2" rel="tag"&gt;Beta 2&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET+4.0" rel="tag"&gt;.NET 4.0&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fgeekswithblogs.net%2fsdorman%2farchive%2f2009%2f10%2f19%2fvisual-studio-2010-beta-2.aspx&amp;amp;title=Visual+Studio+2010+Beta+2"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border: 0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135560"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135560" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/135560.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/10/19/visual-studio-2010-beta-2.aspx</guid>
            <pubDate>Mon, 19 Oct 2009 18:09:29 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/135560.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/10/19/visual-studio-2010-beta-2.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/135560.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/135560.aspx</trackback:ping>
        </item>
        <item>
            <title>Interesting .NET Framework Statistics</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/09/20/interesting-.net-framework-statistics.aspx</link>
            <description>&lt;p&gt;I’ve been very “heads down” working on my upcoming book from Sams Publishing, &lt;u&gt;Teach Yourself C# 2010 in 24 Hours&lt;/u&gt;, so I haven’t been blogging as much as I usually do. In doing some research for the book, I’ve been taking an in-depth look at the .NET Framework and thought I would share some interesting statistics.&lt;/p&gt;  &lt;p&gt;There are 18,435 total types in the .NET Framework 3.5 SP1, with 13,995 classes, 1,216 interfaces, 2,100 enums, and 1,124 structs. The complete breakdown is shown below.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/Interesting.NETFrameworkStatistics_12ABF/image_14.png" width="613" height="589" /&gt; &lt;/p&gt;  &lt;p&gt;Of the 13,995 classes, 303 of them are exceptions. There are 227 public and 76 non-public exceptions. The complete breakdown is shown below.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/Interesting.NETFrameworkStatistics_12ABF/image_15.png" width="613" height="103" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:92a0535e-90f0-48b1-b08c-aaf9eef02386" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET+Framework" rel="tag"&gt;.NET Framework&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fgeekswithblogs.net%2fsdorman%2farchive%2f2009%2f09%2f20%2finteresting-.net-framework-statistics.aspx&amp;amp;title=Interesting+.NET+Framework+Statistics"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border: 0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134939"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134939" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/134939.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/09/20/interesting-.net-framework-statistics.aspx</guid>
            <pubDate>Mon, 21 Sep 2009 01:15:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/134939.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/09/20/interesting-.net-framework-statistics.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/134939.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/134939.aspx</trackback:ping>
        </item>
        <item>
            <title>Premature optimization is the root of all evil</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/08/28/premature-optimization-is-the-root-of-all-evil.aspx</link>
            <description>&lt;p&gt;I’ve lost count how many times I’ve heard that quote. It’s a great quote said by one of the leading minds in computer programming and formal mathematics, &lt;a href="http://en.wikipedia.org/wiki/Donald_Knuth" target="_blank"&gt;Donald Knuth&lt;/a&gt;. The problem with this quote is that, like so many other things, people have only remembered (or only quote) a small portion of the entire thing.&lt;/p&gt;  &lt;p&gt;To read the full quote, you need to look at a paper published in December 1974 titled &lt;u&gt;Structured Programming with go to Statements&lt;/u&gt; in Computing Surveys.&lt;/p&gt;  &lt;p&gt;The full quote is this (in reference to a loop optimization technique that provides a 12% performance improvement):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The conventional wisdom shared by many of today's software engineers calls for ignoring efficiency in the small; but I believe this is simply an overreaction to the abuses they see being practiced by pennywise-     &lt;br /&gt;and-pound-foolish programmers, who can't debug or maintain their "optimized" programs. In established engineering disciplines a 12% improvement, easily obtained, is never considered marginal; and I believe the same viewpoint should prevail in software engineering. Of course I wouldn't bother making such optimizations on a oneshot job, but when it's a question of preparing quality programs, I don't want to restrict myself to tools that deny me such efficiencies.&lt;/p&gt;    &lt;p&gt;There is no doubt that the grail of efficiency leads to abuse. Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.&lt;/p&gt;    &lt;p&gt;Yet we should not pass up our opportunities in that critical 3%. A good programmer will not be lulled into complacency by such reasoning, he will be wise to look carefully at the critical code; but only after that code     &lt;br /&gt;has been identified. It is often a mistake to make a priori judgments about what parts of a program are really critical, since the universal experience of programmers who have been using measurement tools has been      &lt;br /&gt;that their intuitive guesses fail. &lt;font size="1"&gt;(Computing Surveys, Vol. 6, No. 4, December 1974, p. 268 [p. 8 of the &lt;a href="http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf" target="_blank"&gt;PDF&lt;/a&gt;])&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;While the overall sentiment could be summed up simply as “premature optimization is the root of all evil”, I think the point being made here is that &lt;strong&gt;well-known optimizations&lt;/strong&gt; can and should be applied otherwise time spent on optimizing code should be focused on that small percent of critical code and should be performed with quantitative means.&lt;/p&gt;  &lt;p&gt;What are well-known optimizations? That partly depends on your programming language and partly on your problem domain. Optimizations specific to a problem domain are very domain specific and not easily communicated outside of that domain. However, language specific well-known optimizations are a different story.&lt;/p&gt;  &lt;p&gt;Take string concatenation inside a loop, particularly for languages like C# where strings are immutable objects. Why is that important? Since strings are immutable, they cannot be changed once created. When concatenating two strings you incur overhead from the creation of temporary strings. For example, consider the following code:&lt;/p&gt;  &lt;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: 'Courier New', 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"&gt;   &lt;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: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;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: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;string s = "this is " + "a test.";&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;While this is an arbitrary example, in order for this line to execute it would be necessary to create 3 strings. (Yes, I know the compiler (and if not the compiler, the JIT) would optimize this to remove the concatenation, but pretend for a moment that it didn’t.) Now, imagine this line running inside a loop 10 times. That loop has just created approximately 30 temporary string objects to perform that concatenation. In such a situation, it should be intuitive that the use of a StringBuilder to perform the string concatenation is preferable as you no longer have the intermediate string object creation and result in one allocation to create the StringBuilder and one allocation to convert the StringBuilder to an actual string object. There is always the possibility that while iterating through the loop the StringBuilder may need to perform a few additional buffer reallocations, but that still results in less overhead than creating immutable string objects.&lt;/p&gt;

&lt;p&gt;The point here is that while it is true that premature optimization is the root of all evil, optimization should be a measured undertaking and well-known optimizations applied early are not premature.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left; margin:0px; padding:4px 4px 4px 4px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/sdorman/archive/2009/08/28/premature-optimization-is-the-root-of-all-evil.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/sdorman/archive/2009/08/28/premature-optimization-is-the-root-of-all-evil.aspx&amp;amp;bgcolor=0080C0&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks Image" border="0/" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134372"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134372" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/134372.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/08/28/premature-optimization-is-the-root-of-all-evil.aspx</guid>
            <pubDate>Sat, 29 Aug 2009 03:24:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/134372.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/08/28/premature-optimization-is-the-root-of-all-evil.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/134372.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/134372.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio 2010 Beta 1</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/05/18/visual-studio-2010-beta-1.aspx</link>
            <description>&lt;p&gt;I’m still waiting for an “official” announcement, but if you are an MSDN subscriber you will be able to download &lt;a href="http://www.microsoft.com/australia/visualstudio/products/2010/default.mspx" target="_blank"&gt;Visual Studio 2010&lt;/a&gt; Beta 1 later today (May 18), probably around 12:00 PM (PST). If you aren’t an MSDN subscriber, you will be able to download Beta 1 on May 20 through Microsoft Downloads. &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d4a7ccef-e259-4569-b391-bc31a73b2aac" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio+2010" rel="tag"&gt;Visual Studio 2010&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132199"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132199" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/132199.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/05/18/visual-studio-2010-beta-1.aspx</guid>
            <pubDate>Mon, 18 May 2009 14:55:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/132199.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/05/18/visual-studio-2010-beta-1.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/132199.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/132199.aspx</trackback:ping>
        </item>
        <item>
            <title>Code Contracts in .NET</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/03/02/code-contracts-in-.net.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/CodeContractsin.NET_10367/dd491992_codecontracts_project(en-us)_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="dd491992_codecontracts_project(en-us)" border="0" alt="dd491992_codecontracts_project(en-us)" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/CodeContractsin.NET_10367/dd491992_codecontracts_project(en-us)_thumb.png" width="443" height="169" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I have &lt;a target="_blank" href="http://geekswithblogs.net/sdorman/archive/2008/12/10/more-on-.net-4.0-code-contracts.aspx"&gt;previously&lt;/a&gt; talked about code contracts in .NET 4.0, and while .NET 4.0 isn’t out yet you can work with them now in Visual Studio 2008 through &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx"&gt;MSDN DevLabs&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In case you aren’t familiar with code contracts in .NET, this is a feature that was actually built by the .NET CLR team to provide a language-agnostic way to express code assumptions in the form of pre-conditions, post-conditions, and object invariants.&lt;/p&gt;  &lt;p&gt;There are currently two tools provided:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Runtime Checking&lt;/strong&gt;, which uses a binary rewriter to modify a program by injecting the contracts, which are checked as part of program execution.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Static Checking &lt;/strong&gt;can decide if there are any contract violations without even running the program. It checks for implicit contracts, such as null dereferences and array bounds, as well as the explicit contracts. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is definitely something to take a look at and start getting familiar with in order to simplify your code and testing.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3fb497fb-909c-4674-a27d-5ae1a6ce58c2" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Code+Contracts" rel="tag"&gt;Code Contracts&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129801"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129801" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/129801.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/03/02/code-contracts-in-.net.aspx</guid>
            <pubDate>Tue, 03 Mar 2009 00:44:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/129801.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/03/02/code-contracts-in-.net.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/129801.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/129801.aspx</trackback:ping>
        </item>
        <item>
            <title>MVP Summit 2009 Twitters</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/03/01/mvp-summit-2009-twitters.aspx</link>
            <description>&lt;p&gt;If you’re at MVP Summit 2009 (or not at Summit) and trying to find people to follow I’ve started putting together a list of MVPs and Microsoft employees that I know who are here.&lt;/p&gt;  &lt;p&gt;Everyone &lt;em&gt;should&lt;/em&gt; be using the #mvp09 hashtag for their tweets, so you can follow the conversations using &lt;a target="_blank" href="http://hashtags.org/tag/mvp09"&gt;#hashtags&lt;/a&gt;, &lt;a target="_blank" href="http://search.twitter.com/search?q=%23mvp09"&gt;Twitter Search&lt;/a&gt;, &lt;a target="_blank" href="http://twopular.com/trend/_mvp09"&gt;Twopular&lt;/a&gt;, &lt;a target="_blank" href="http://tweetscan.com/index.php?s=%23mvp09"&gt;TweetScan&lt;/a&gt;, or any other twitter search sites.&lt;/p&gt;  &lt;p&gt;If you want to be included in this list (or have updates to your information), leave a comment or message me on Twitter.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h1&gt;&lt;strong&gt;Microsoft MVPs&lt;/strong&gt;&lt;/h1&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="1101"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="147"&gt;&lt;strong&gt;&lt;u&gt;Name&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;strong&gt;&lt;u&gt;Twitter&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;strong&gt;&lt;u&gt;Blog&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;&lt;strong&gt;&lt;u&gt;Location&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Scott Dorman&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/sdorman"&gt;http://twitter.com/sdorman&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a target="_blank" href="http://geekswithblogs.net/sdorman"&gt;http://geekswithblogs.net/sdorman&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Tampa, FL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Nikita Polyakov&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/NikitaP"&gt;http://twitter.com/NikitaP&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://geekswithblogs.net/campuskoder/Default.aspx" target="_blank" href="http://geekswithblogs.net/campuskoder/Default.aspx"&gt;http://geekswithblogs.net/campuskoder/Default.aspx&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Tampa, FL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Bill Reiss&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/billreiss"&gt;http://twitter.com/billreiss&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://www.bluerosegames.com/silverlightbrasstacks/" target="_blank" href="http://www.bluerosegames.com/silverlightbrasstacks/"&gt;http://www.bluerosegames.com/silverlightbrasstacks/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Tampa, FL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Rob Zelt&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/robzelt"&gt;http://twitter.com/robzelt&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="www.robzel" target="_blank" href="http://www.robzelt.com/blog/"&gt;http://www.robzelt.com/blog/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;NC&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Keith Elder&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/keithelder"&gt;http://twitter.com/keithelder&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://keithelder.net/blog/" target="_blank" href="http://keithelder.net/blog/"&gt;http://keithelder.net/blog/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Hattiesburg, MS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Todd Miranda&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/tmiranda"&gt;http://twitter.com/tmiranda&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://www.xperimentality.com/" target="_blank" href="http://www.xperimentality.com/"&gt;http://www.xperimentality.com/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Alabama&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Alan Stevens&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/alanstevens"&gt;http://twitter.com/alanstevens&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="netcave.org" target="_blank" href="http://netcave.org/"&gt;http://netcave.org/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Knoxville, TN&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Jeff Barnes&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/jeff_barnes"&gt;http://twitter.com/jeff_barnes&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://jeffbarnes.net/blog/" target="_blank" href="http://jeffbarnes.net/blog/"&gt;http://jeffbarnes.net/blog/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Birmingham, AL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Dennis Bottjer&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/dbottjer"&gt;http://twitter.com/dbottjer&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://drowningintechnicaldebt.com/blogs/dennisbottjer/default.aspx" target="_blank" href="http://drowningintechnicaldebt.com/blogs/dennisbottjer/default.aspx"&gt;http://drowningintechnicaldebt.com/blogs/dennisbottjer/default.aspx&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Tulsa, OK&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Shervin Shakibi&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="http://twitter.com/ShervSherv" target="_blank" href="http://twitter.com/ShervSherv"&gt;http://twitter.com/ShervSherv&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="Shervin's Blog" target="_blank" href="http://www.geekswithblogs.com/shervin/Default.aspx"&gt;http://www.geekswithblogs.com/shervin/Default.aspx&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Boca Raton, FL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Simone Chiaretta&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/simonech"&gt;http://twitter.com/simonech&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://codeclimber.net.nz/" target="_blank" href="http://codeclimber.net.nz/"&gt;http://codeclimber.net.nz/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Milan, Italy&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Stephen Foskett&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/sfoskett"&gt;http://twitter.com/sfoskett&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a target="_blank" href="http://blog.fosketts.net/"&gt;http://blog.fosketts.net/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Wooster, OH&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Dave Noderer&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="http://twitter.com/davenoderer" href="http://twitter.com/davenoderer"&gt;http://twitter.com/davenoderer&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://geekswithblogs.net/dnoderer/Default.aspx" href="http://geekswithblogs.net/dnoderer/Default.aspx"&gt;http://geekswithblogs.net/dnoderer/Default.aspx&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Deerfield Beach, FL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;David Silverlight&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="http://twitter.com/HeadGeek" href="http://twitter.com/HeadGeek"&gt;http://twitter.com/HeadGeek&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt; &lt;/td&gt;        &lt;td valign="top" width="169"&gt;Miami, FL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Bill Pytlovany&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/BillP"&gt;http://twitter.com/BillP&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="bitsfrombill.com" target="_blank" href="http://bitsfrombill.com/"&gt;http://bitsfrombill.com/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Scotia, NY&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Joseph Guadagno&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="http://twitter.com/jguadagno" target="_blank" href="http://twitter.com/jguadagno"&gt;http://twitter.com/jguadagno&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="http://www.josephguadagno.net/default.aspx?AspxAutoDetectCookieSupport=1" target="_blank" href="http://www.josephguadagno.net/default.aspx?AspxAutoDetectCookieSupport=1"&gt;http://www.josephguadagno.net/default.aspx?AspxAutoDetectCookieSupport=1&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Chandler, AZ&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Tony Ramos&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/tonyramos"&gt;http://twitter.com/tonyramos&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a title="tonyramos.com" target="_blank" href="http://tonyramos.com/"&gt;http://tonyramos.com/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Cleveland, OH&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="147"&gt;Marques Lyons&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="tromboneforhire" target="_blank" href="http://www.twitter.com/tromboneforhire"&gt;http://www.twitter.com/tromboneforhire&lt;/a&gt;&lt;a href="http://www.insidethecircle.net/"&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="539"&gt;&lt;a href="http://www.insidethecircle.net/"&gt;&lt;/a&gt;&lt;a href="http://www.insidethecircle.net/"&gt;&lt;/a&gt;&lt;a title="http://www.insidethecircle.net/" target="_blank" href="http://www.insidethecircle.net/"&gt;http://www.insidethecircle.net/&lt;/a&gt;&lt;a href="http://www.insidethecircle.net/"&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="169"&gt;Anaheim, CA&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h1&gt;&lt;strong&gt;Microsoft Employees&lt;/strong&gt;&lt;/h1&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="1101"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="154"&gt;&lt;strong&gt;&lt;u&gt;Name&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;strong&gt;&lt;u&gt;Twitter&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="301"&gt;&lt;strong&gt;&lt;u&gt;Blog&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="400"&gt;&lt;strong&gt;&lt;u&gt;Focus Area/Position&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="154"&gt;Kevin Pilch-Bisson&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/Pilchie"&gt;http://twitter.com/Pilchie&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="301"&gt;&lt;a title="http://blogs.msdn.com/kevinpilchbisson/" target="_blank" href="http://blogs.msdn.com/kevinpilchbisson"&gt;http://blogs.msdn.com/kevinpilchbisson&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="400"&gt;Dev Lead – C#&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="154"&gt;Jake Grey&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/jake_grey"&gt;http://twitter.com/jake_grey&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="301"&gt; &lt;/td&gt;        &lt;td valign="top" width="400"&gt;MVP Lead - C# &amp;amp; Security, Community and Online Support&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="154"&gt;P.J. Forgione&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="http://twitter.com/pj_forgione" target="_blank" href="http://twitter.com/pj_forgione"&gt;http://twitter.com/pj_forgione&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="301"&gt; &lt;/td&gt;        &lt;td valign="top" width="400"&gt;MVP Lead – Visual Basic&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="154"&gt;Joe Healy&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a target="_blank" href="http://twitter.com/devfish"&gt;http://twitter.com/devfish&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="301"&gt;&lt;a target="_blank" href="http://devfish.net/"&gt;http://devfish.net&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="400"&gt;Developer Evangelist – Florida&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="154"&gt;Scott Hanselman&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="@shanselman" target="_blank" href="http://twitter.com/shanselman/"&gt;http://twitter.com/shanselman/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="301"&gt;&lt;a href="http://www.hanselman.com/blog"&gt;http://www.hanselman.com/blog&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="400"&gt;Principal Program Manager&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="154"&gt;Luis Daniel&lt;/td&gt;        &lt;td valign="top" width="244"&gt;&lt;a title="luisdans" target="_blank" href="http://twitter.com/luisdans"&gt;http://twitter.com/luisdans&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="301"&gt;&lt;a title="http://blogs.msdn.com/luisdans/" target="_blank" href="http://blogs.msdn.com/luisdans/"&gt;http://blogs.msdn.com/luisdans/&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="400"&gt;Developer Platform Evangelism Area Lead – Latin America&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:38f7749d-8637-46ab-833b-002cda248023" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MVP09" rel="tag"&gt;MVP09&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129763"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129763" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/129763.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/03/01/mvp-summit-2009-twitters.aspx</guid>
            <pubDate>Sun, 01 Mar 2009 23:45:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/129763.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/03/01/mvp-summit-2009-twitters.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/129763.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/129763.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio 2008 Debugging &amp;ndash; The Watch Window</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-the-watch-window.aspx</link>
            <description>&lt;p&gt;The Watch window (actually there are four different Watch windows you can use) is easily the most powerful aspect of the Visual Studio debugger and the underlying technology it uses actually surfaces in several places:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Watch&lt;/li&gt;    &lt;li&gt;Autos&lt;/li&gt;    &lt;li&gt;Locals&lt;/li&gt;    &lt;li&gt;Quick Watch&lt;/li&gt;    &lt;li&gt;“Data Tips” (the debugging tool tips that appear when you hover over a code element)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The thing that most people might not realize is that you can actually call methods in the Watch window. This is useful because it allows you to see data structures that might not otherwise display well and you can also have completely dynamic assertions.&lt;/p&gt;  &lt;p&gt;Calling a method in the Watch window is as simple as adding the parenthesis and any parameters needed.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingTheWatchWindow_10960/image_3.png" width="464" height="256" /&gt; &lt;/p&gt;  &lt;p&gt;There are a few considerations to be aware of when doing this, however. They are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The function (property or method) executes in the context of the debuggee.&lt;/li&gt;    &lt;li&gt;Don’t do anything more than reading memory.&lt;/li&gt;    &lt;li&gt;The method must execute in less than 20 seconds.&lt;/li&gt;    &lt;li&gt;Breakpoints are not hit when called from the Watch window.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Another very useful trick is that the Watch window supports drag and drop from the code editor. Simply select the expression in the code editor and drag it to the watch window.&lt;/p&gt;  &lt;p&gt;Just like you can execute functions in the watch window, you can execute them in the Value column of the Watch window as well. This allows you to easily change the value of a watched expression to a completely new instance of an object. In the Value column, simply enter “new SomeClass()” to set the value to a new instance of the SomeClass object.&lt;/p&gt;  &lt;p&gt;From the Immediate window you can type in an expression to allocate on object&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; 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: 'Courier New', courier, monospace; 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"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; ? SomeClass x = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SomeClass()&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;and then in the Value column enter the variable prefixed with a “$” sign. (In this example, $x.)&lt;/p&gt;

&lt;p&gt;Finally, let’s take a look at the Make Object ID capability of the debugger. This is available from the Locals and Autos windows through the context menu. Simply select the object you are interested in and right click, then choose the Make Object ID. This will create a numeric ID for that object, which will be displayed after the value.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingTheWatchWindow_10960/image_11.png" width="752" height="66" /&gt; &lt;/p&gt;

&lt;p&gt;What is actually happening here is that it tells the debugger to watch a particular object in memory no matter where it goes. This is useful because if the actual object goes out of scope you can still watch it by using the object ID. If the object ID says “Can’t evaluate” then it means the object has been garbage collected. Object IDs can also be used in conditional breakpoints and as parameters to function calls.&lt;/p&gt;

&lt;p&gt;For instance, if you wanted to know what GC generation an object is in, you can do so using Object IDs.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingTheWatchWindow_10960/image_10.png" width="630" height="125" /&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:681b2357-8899-4f1c-adea-8972f8e9bcac" class="wlWriterSmartContent"&gt;&lt;i&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Advanced" rel="tag"&gt;Advanced&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Debugging" rel="tag"&gt;Debugging&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left; margin:0px; padding:4px 4px 4px 4px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-the-watch-window.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-the-watch-window.aspx&amp;amp;bgcolor=0080C0&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks Image" border="0/" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129407"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129407" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/129407.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-the-watch-window.aspx</guid>
            <pubDate>Sun, 15 Feb 2009 02:23:48 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/129407.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-the-watch-window.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/129407.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/129407.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio 2008 Debugging &amp;ndash; Advanced Tricks</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-advanced-tricks.aspx</link>
            <description>&lt;p&gt;We previously talked about the &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-advanced-breakpoints.aspx" target="_blank"&gt;Location, Condition, Hit Count&lt;/a&gt;, &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-multi-threaded-debugging.aspx" target="_blank"&gt;Filter&lt;/a&gt;, and &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-tracepoints.aspx" target="_blank"&gt;When Hit&lt;/a&gt; modifiers for breakpoints. These are great advanced breakpoints that will really make your debug sessions much more useful, but there are also some other advances in Visual Studio that go beyond these breakpoint modifiers.&lt;/p&gt;  &lt;p&gt;The first advance is the idea of advanced location breakpoints. How many times have you been debugging an issue and as you’re looking at the call stack you realize that you want to set a breakpoint somewhere higher up in the call stack? This is really useful when you want to let execution continue but want to stop part way through the return sequence from some lower-level function.&lt;/p&gt;  &lt;p&gt;In order to accomplish this you would ordinarily have to find the source file in the solution explorer, then find the function you are interested in and set your breakpoint. Yes, you can simplify this by double-clicking the line in the call stack, which will take you to that line in the source code but then you loose the context of your current location.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_3.png" width="703" height="245" /&gt; &lt;/p&gt;  &lt;p&gt;Well, Visual Studio allows you to select the line in the call stack and press F9 (on the default keyboard, this is the keyboard shortcut to insert a breakpoint) and a breakpoint will be inserted at the appropriate location in code. You can also right click on the stack item and choose Run to Cursor.&lt;/p&gt;  &lt;p&gt;This is great, but what about trying to set a breakpoint on a line that contains sub expressions, such as a foreach loop. A foreac loop is actually comprised of 3 sub expressions. If you click the gutter to set a breakpoint it sets it on the first sub expression on the line. &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_6.png" width="559" height="42" /&gt;&lt;/p&gt;  &lt;p&gt;How do you set a breakpoint on another sub expression? For instance, if I wanted to set a breakpoint on the workerSettings.Tasks property in the foreach statement. By selecting the sub expression (or simply putting your cursor anywhere in that sub expression) and pressing F9 you will set a breakpoint only on that sub expression. &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_9.png" width="551" height="37" /&gt; &lt;/p&gt;  &lt;p&gt;Let’s now look at a concept that can only be called dynamic assertions. Hopefully you are familiar with the Debug.Assert and Trace.Assert methods which allow you to halt program execution given a specific Boolean condition. While these are useful they aren’t very dynamic and can’t be very complex. But what happens if you want to hit a breakpoint when an error condition occurs in your application that needs to take in to account multiple factors?&lt;/p&gt;  &lt;p&gt;If you remember from our discussion on the &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-advanced-breakpoints.aspx" target="_blank"&gt;Condition&lt;/a&gt; modifier you can set the condition expression to any any valid Boolean expression. This means that you can also set the condition to be the result of a method call, as long as that method returns a Boolean value. In order to do this, you need to add a method that returns a Boolean. This method should return true if an error condition exists. (Basically, it should return true when you want the breakpoint to hit.) &lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; 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: 'Courier New', courier, monospace; 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"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #cc6633"&gt;#if&lt;/span&gt; DEBUG&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; CheckName()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.name == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; 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: 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; &lt;span style="color: #cc6633"&gt;#endif&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Notice that I didn’t use the ConditionalAttribute(“DEBUG”) syntax here. The reason for this is that this attribute only works for void return types. Now that we have this method defined, you can use it as the condition expression&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_12.png" width="516" height="249" /&gt; &lt;/p&gt;

&lt;p&gt;You also get some IntelliSense help showing that this is the correct method and you can verify that the condition is set correctly by looking at the Breakpoints window&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_17.png" width="781" height="23" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Now, whenever the result of CheckName() is true, the breakpoint will be hit. This allows you to create some really complex and powerful debug conditions for your breakpoints.&lt;/p&gt;

&lt;p&gt;Finally, we need to take a look at the New Breakpoint dialog. This is probably the most powerful and underutilized feature of the debugging system. Most of the developers that I know open files and scroll around until they find the line of code that should contain a breakpoint. In at least half of those times (if not more) they already know the function that should contain the breakpoint and generally want to set the breakpoint at the start of the function. This is where the New Breakpoint dialog can really help.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_20.png" width="606" height="277" /&gt; &lt;/p&gt;

&lt;p&gt;As you can see from the dialog, you can simply type the name of the function (this can be either a method or a property) which will contain your breakpoint. Unfortunately you don’t get any IntelliSense help while typing the function (like you do in the Breakpoint Condition dialog) but if you leave the “Use IntelliSense to verify the function name” checkbox checked it will display a warning message if you get the name wrong.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_23.png" width="494" height="186" /&gt; &lt;/p&gt;

&lt;p&gt;While this can save a lot of scrolling through files to find the right function, it does require you to know the fully qualified method name, which means you must know both the class and method name. What happens if you don’t know what class the method is in or you have multiple methods of the same name where you want to set breakpoints? As long as you have a project loaded, you can simply type the function name and a Choose Breakpoints dialog will display.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingAdvancedTricks_E730/image_26.png" width="478" height="265" /&gt; &lt;/p&gt;

&lt;p&gt;From this dialog, you can see all of the functions that match the name from all classes.&lt;/p&gt;

&lt;p&gt;
  &lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3235025c-6167-4d4a-b1e8-b737a2c71f22" class="wlWriterSmartContent"&gt;&lt;i&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Advanced" rel="tag"&gt;Advanced&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Debugging" rel="tag"&gt;Debugging&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left; margin:0px; padding:4px 4px 4px 4px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-advanced-tricks.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-advanced-tricks.aspx&amp;amp;bgcolor=0080C0&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks Image" border="0/" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129406"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129406" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/129406.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-advanced-tricks.aspx</guid>
            <pubDate>Sun, 15 Feb 2009 00:45:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/129406.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-advanced-tricks.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/129406.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/129406.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio 2008 Debugging Tricks &amp;ndash; Tracepoints</title>
            <link>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-tracepoints.aspx</link>
            <description>&lt;p&gt;We have talked about the &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-advanced-breakpoints.aspx" target="_blank"&gt;Location, Condition, Hit Count&lt;/a&gt;, and &lt;a href="http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-multi-threaded-debugging.aspx" target="_blank"&gt;Filter&lt;/a&gt; modifiers for breakpoints which only leaves the When Hit modifier. Using the When Hit modifier allows you to change your breakpoint to a tracepoint.&lt;/p&gt;  &lt;p&gt;What is a tracepoint? Simply put, it is a breakpoint that continues execution. Why would this be interesting or even important? Tracepoints are great when you want to trace a particular path of execution, such as OnDeserialized events in your WCF DataContract classes. You are interested in watching the order your objects are deserialized to ensure that everything is happening when you expected it to occur. &lt;/p&gt;  &lt;p&gt;In this scenario, you aren’t really interested in stopping the execution. Ordinarily you could achieve this by inserting Trace.WriteLine (or even Console.WriteLine or Debug.WriteLine) calls throughout your code. While this would work it means that you are adding lines of code just for debugging purposes (so hopefully they would only be needed temporarily) which means you need to remember to remove them when you are done debugging. Wouldn’t it be great if you could simply set a breakpoint to execute Console.WriteLine (or some equivalent) to display a message in our Output window?&lt;/p&gt;  &lt;p&gt;That’s exactly what a tracepoint does, but it can do a lot more than just that.  &lt;/p&gt;&lt;p&gt;&lt;/p&gt;   &lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/sdorman/WindowsLiveWriter/VisualStudio2008DebuggingTricksTracepoin_E1A7/image_3.png" width="518" height="436" /&gt;  &lt;p&gt;The When Breakpoint Is Hit dialog allows you to simply print a message, but that message can contain special keywords and can also evaluate methods and properties of any object that is in scope when the tracepoint is hit. In addition to printing a message,  you can also run a macro. By default a tracepoint is intended to continue execution, but you can change that as well which will effectively give you a breakpoint which will print a message and/or execute a macro before breaking.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:47dd9e17-5935-4891-a6be-aeae9689a30c" class="wlWriterSmartContent"&gt;&lt;i&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Advanced" rel="tag"&gt;Advanced&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Debugging" rel="tag"&gt;Debugging&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left; margin:0px; padding:4px 4px 4px 4px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-tracepoints.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-tracepoints.aspx&amp;amp;bgcolor=0080C0&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks Image" border="0/" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129402"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129402" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/sdorman/aggbug/129402.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Scott Dorman</dc:creator>
            <guid>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-tracepoints.aspx</guid>
            <pubDate>Sat, 14 Feb 2009 22:17:12 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/sdorman/comments/129402.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-tricks-ndash-tracepoints.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/sdorman/comments/commentRss/129402.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/sdorman/services/trackbacks/129402.aspx</trackback:ping>
        </item>
    </channel>
</rss>