<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.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>C#, VS Deployment and all geek talk : How To</title><link>http://msmvps.com/blogs/vipul/archive/tags/How+To/default.aspx</link><description>Tags: How To</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>My Faq on "hashtable lookups for struct types" is published  at http://blogs.msdn.com/CSharpFaq</title><link>http://msmvps.com/blogs/vipul/archive/2006/03/21/How-can-I-speed-up-hashtable-lookups-for-struct-types.aspx</link><pubDate>Tue, 21 Mar 2006 15:48:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:87174</guid><dc:creator>Vipul Patel</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vipul/rsscomments.aspx?PostID=87174</wfw:commentRss><comments>http://msmvps.com/blogs/vipul/archive/2006/03/21/How-can-I-speed-up-hashtable-lookups-for-struct-types.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Check out &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/csharpfaq/archive/2006/03/20/556192.aspx"&gt;&lt;FONT face=Tahoma size=2&gt;http://blogs.msdn.com/csharpfaq/archive/2006/03/20/556192.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Tahoma size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;for a FAQ on Hashtable lookup for value types.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=87174" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vipul/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/SQL2005/default.aspx">SQL2005</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/MVP+Activity/default.aspx">MVP Activity</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/Developer/default.aspx">Developer</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/How+To/default.aspx">How To</category></item><item><title>Guidelines on clean up code</title><link>http://msmvps.com/blogs/vipul/archive/2006/03/07/Guideline-on-cleaning-resources-in-managed-code.aspx</link><pubDate>Tue, 07 Mar 2006 19:14:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:85669</guid><dc:creator>Vipul Patel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vipul/rsscomments.aspx?PostID=85669</wfw:commentRss><comments>http://msmvps.com/blogs/vipul/archive/2006/03/07/Guideline-on-cleaning-resources-in-managed-code.aspx#comments</comments><description>Many a times, we use the catch block inside the try catch block for our clean up code. 
&lt;P class=MsoNormal&gt;
&lt;P class=MsoNormal&gt;Something like
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT color=#008000&gt;try&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#008000&gt;// Do something&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT color=#008000&gt;catch&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#008000&gt;// work failed, clean up code here&lt;/FONT&gt;&lt;BR&gt;}&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Rather than the above approach of using the catch block, it would be nicer to use the finally block, something like&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT color=#008000&gt;bool&lt;/FONT&gt; workSuccessful = false;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT color=#008000&gt;try&lt;/FONT&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;//&amp;nbsp;do some work&lt;/FONT&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; workSuccessful = true;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT color=#008000&gt;finally&lt;/FONT&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;nbsp; if(!workSuccessfull)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// cleanup code here.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;There is elegance in the latter method and I would certainly recommend that approach, if you cannot use "&lt;STRONG&gt;&lt;FONT face="Courier New" color=#008000&gt;using&lt;/FONT&gt;&lt;/STRONG&gt;". See below for details.&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;PS&lt;/B&gt;: Use this approach only if better alternatives are not available. One of the automatic cleanup approaches available with C# is the &lt;B&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;/B&gt; construct.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;Something like,&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;using (TextReader tr = new StreamReader("FileName"))&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;nbsp; // do my work here.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;The “&lt;B&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;/B&gt;” construct automatically clean up the unmanaged resource (&lt;SPAN&gt;TextReader&lt;/SPAN&gt;) once the block has completed execution.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;In the event that you cannot use "&lt;SPAN&gt;using&lt;/SPAN&gt;", the try-finally approach would be the best way.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=85669" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vipul/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/Developer/default.aspx">Developer</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/How+To/default.aspx">How To</category></item><item><title>How to: Determining programmatically if DLL is registered</title><link>http://msmvps.com/blogs/vipul/archive/2006/01/27/Is-DLL-Registered.aspx</link><pubDate>Sat, 28 Jan 2006 00:02:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:81958</guid><dc:creator>Vipul Patel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vipul/rsscomments.aspx?PostID=81958</wfw:commentRss><comments>http://msmvps.com/blogs/vipul/archive/2006/01/27/Is-DLL-Registered.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Here is a C# code snippet to determine if a particular DLL is registered or not.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;[DllImport("kernel32")]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;FONT&gt; &lt;SPAN&gt;extern&lt;/SPAN&gt; &lt;SPAN&gt;static&lt;/SPAN&gt; &lt;SPAN&gt;int&lt;/SPAN&gt;&lt;/FONT&gt; LoadLibrary(&lt;SPAN&gt;string&lt;/SPAN&gt; lpLibFileName);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;[DllImport("kernel32")]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;extern&lt;/SPAN&gt; &lt;SPAN&gt;static&lt;/SPAN&gt; &lt;SPAN&gt;bool&lt;/SPAN&gt; FreeLibrary(&lt;SPAN&gt;int&lt;/SPAN&gt; hLibModule);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;bool&lt;/SPAN&gt; IsDllRegistered(&lt;SPAN&gt;string&lt;/SPAN&gt; DllName)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;int&lt;/SPAN&gt; libId = LoadLibrary(DllName);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt; (libId&amp;gt;0) FreeLibrary(libId);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;return&lt;/SPAN&gt; (libId&amp;gt;0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;Source: &lt;A href="http://blogs.msdn.com/asanto/archive/2006/01/22/516011.aspx"&gt;http://blogs.msdn.com/asanto&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=81958" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vipul/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/How+To/default.aspx">How To</category></item><item><title>Visual Studio 2005 - A Guided Tour</title><link>http://msmvps.com/blogs/vipul/archive/2006/01/20/Visual-Studio-Guided-tour.aspx</link><pubDate>Sat, 21 Jan 2006 00:30:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:81553</guid><dc:creator>Vipul Patel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/vipul/rsscomments.aspx?PostID=81553</wfw:commentRss><comments>http://msmvps.com/blogs/vipul/archive/2006/01/20/Visual-Studio-Guided-tour.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Want to learn more about &lt;STRONG&gt;Visual Studio 2005&lt;/STRONG&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;&lt;A href="http://msdn.microsoft.com/msdnmag"&gt;MSDN magazine &lt;/A&gt;folks have come&amp;nbsp; up with a new issue dedicated solely to the new IDE. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Check it out online at &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/00/default.aspx"&gt;&lt;FONT face=Tahoma size=2&gt;http://msdn.microsoft.com/msdnmag/issues/06/00/default.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=81553" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/vipul/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/Developer/default.aspx">Developer</category><category domain="http://msmvps.com/blogs/vipul/archive/tags/How+To/default.aspx">How To</category></item></channel></rss>