<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/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>Runtime Debugger - kannan M ambadi's blog : Performance</title><link>http://weblogs.asp.net/kannanambadi/archive/tags/Performance/default.aspx</link><description>Tags: Performance</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Improve ASPX web page performance by combining Skin &amp; CSS</title><link>http://weblogs.asp.net/kannanambadi/archive/2009/06/22/improve-aspx-page-performance-by-reducing-http-response-size-by-combining-skin-amp-css.aspx</link><pubDate>Mon, 22 Jun 2009 02:57:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7131770</guid><dc:creator>kannan.ambadi</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kannanambadi/rsscomments.aspx?PostID=7131770</wfw:commentRss><comments>http://weblogs.asp.net/kannanambadi/archive/2009/06/22/improve-aspx-page-performance-by-reducing-http-response-size-by-combining-skin-amp-css.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There has been numerous discussions happened on web site performance, ranging from UI design to Site &lt;strike&gt;H&lt;/strike&gt;osting. Out of this, one of the important step is, to reduce the size of Http Response size. Optimizing Http Response will considerably reduce the page loading time at the browser. There are many ways to create optimized HTML markups to improve client-side performance. I would like to explain one such a way of designing web page. The Loading time factor will mainly depends on the web page size that is going to download at the client's browser. In order to achieve this as a web developer, you will have to work on the following things at least.&lt;i&gt; &lt;/i&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;HTML -&amp;gt; Use &lt;a href="http://en.wikipedia.org/wiki/XHTML" mce_href="http://en.wikipedia.org/wiki/XHTML" target="_blank"&gt;XHTML&lt;/a&gt; markups with CSS always rather than using HTML tables with inline HTML style attributes unless it is required. &lt;/li&gt;    &lt;li&gt;CSS -&amp;gt; Keep all your style definitions in an external&amp;nbsp; stylesheet. It will make the page source clean and also reduce the Http Requests by caching these files at the client machine. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I don't want to discuss about JavaScript, since it might be deviating from the topic. As my title says, we can reduce the HTTP Response size by combining those two factors mentioned above with the help of Asp.Net Skin files. &lt;/p&gt;  &lt;p&gt;As you know, Asp.Net 2.0 has introduced a new feature called &lt;a href="http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx" target="_blank"&gt;Themes&lt;/a&gt; which helps to achieve consistent look and feel for websites. Themes may contain Skin files, CSS files, images etc. A Skin file is nothing but extensions of CSS definitions for the Asp.Net server controls. Themes and skins enables to handle style attributes from Application level to Control level. Skins are mainly used for Web controls such as Label, Button etc. There are two types of skin file, Default skin - which applies same style for all the controls of same type and Named Skin - which possess a SkinID property by which we can apply Style to the control's skinId. Here is an example for Skin file: &lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;font color="#800000"&gt;&amp;lt;asp:Button&amp;nbsp; &lt;/font&gt;SkinID&lt;font color="#0000ff"&gt;="buttonStyle"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; runat&lt;font color="#0000ff"&gt;="server"&lt;/font&gt; &lt;/font&gt;BackColor&lt;font color="#0000ff"&gt;="#2E132D"&lt;/font&gt; BorderColor&lt;font color="#0000ff"&gt;="#507CD1"&lt;/font&gt;&amp;nbsp; Height="25px" Width="120px"       &lt;br&gt;BorderStyle='Solid' BorderWidth='1px' Font-Names='Verdana' Font-Size='11px' ForeColor='White' Font-Bold='true' /&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The main disadvantage on Skin file is, it renders the pre-defined style definitions as inline HTML style attributes attached with the control to which skin is applied. Lets see the skin given above, it renders into the browser as follows &lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;input type='submit' style='width:120px;height:25px;font-weight:bold;font-size:11px;font-family:Verdana;color:White;border-width:1px;border-style:Solid;border-color:#507CD1;background-color:#2E132D; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;These chunks of HTML markups generates every time when the associated web control renders into the browser. Even though the ASPX part looks neat and clean, the HTML markups rendered at the browser may reminds the old &lt;a href="http://en.wikipedia.org/wiki/Web_1.0" mce_href="http://en.wikipedia.org/wiki/Web_1.0" target="_blank"&gt;Web 1.0&lt;/a&gt; page(ie: html tags without CSS) and also results in large size of HTTP Response.&amp;nbsp; Such pages will definitely affect the performance of the website. How can you avoid such scenario? Does it mean skin files are not good at website development? Will Css alone provide better performance?&amp;nbsp; I would say no and definitely continue with skin files, but combined with CSS. In such case, we'll be writing most of the style definitions in CSS classes and link that class to skin by using a skin control property called CssClass. This time, the above skin style will look like as &lt;/p&gt; &lt;font color="#ff0000"&gt;&lt;font color="#800000"&gt;&amp;lt;asp:Button&amp;nbsp; &lt;/font&gt;SkinID&lt;font color="#0000ff"&gt;="buttonStyle" &lt;/font&gt;runat&lt;font color="#0000ff"&gt;="server"&lt;/font&gt; CssClass&lt;font color="#0000ff"&gt;="normalButton"&lt;/font&gt; /&amp;gt;&lt;/font&gt;   &lt;p&gt;and it will render as &lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;input type='submit' &lt;/i&gt;class='normalButton' /&amp;gt;&lt;/p&gt;  &lt;p&gt;Did you see any difference? The chunks of HTML markups are gone!!!....The page size has reduced without removing skins, but by moving all style definitions into an external CSS file.&lt;/p&gt;    &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:874b87a3-b151-4f15-b108-94e32784bb19" style="margin: 0px; padding: 0px; display: inline;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Asp.Net" mce_href="http://technorati.com/tags/Asp.Net" rel="tag"&gt;Asp.Net&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HTML" mce_href="http://technorati.com/tags/HTML" rel="tag"&gt;HTML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CSS" mce_href="http://technorati.com/tags/CSS" rel="tag"&gt;CSS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Themes" mce_href="http://technorati.com/tags/Themes" rel="tag"&gt;Themes&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Skins" mce_href="http://technorati.com/tags/Skins" rel="tag"&gt;Skins&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HTTP%20Response" mce_href="http://technorati.com/tags/HTTP%20Response" rel="tag"&gt;HTTP Response&lt;/a&gt;,&lt;a href="http://technorati.com/tags/StyleSheet" mce_href="http://technorati.com/tags/StyleSheet" rel="tag"&gt;StyleSheet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Page%20Performance" mce_href="http://technorati.com/tags/Page%20Performance" rel="tag"&gt;Page Performance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Loading%20Time" mce_href="http://technorati.com/tags/Loading%20Time" rel="tag"&gt;Loading Time&lt;/a&gt;&lt;/div&gt;&lt;font color="#ff0000"&gt;&lt;br&gt;&lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7131770" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Response/default.aspx">Response</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/C_2300_+2.0/default.aspx">C# 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/microsoft/default.aspx">microsoft</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Themes/default.aspx">Themes</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/StyleSheet/default.aspx">StyleSheet</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net+2.0/default.aspx">Asp.Net 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/CSS/default.aspx">CSS</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/HTML/default.aspx">HTML</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+2.0/default.aspx">.NET 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/ASP.NET+3.5/default.aspx">ASP.NET 3.5</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.net+development/default.aspx">.net development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tools/default.aspx">Tools</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Performance/default.aspx">Performance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Code+Perfromance/default.aspx">Code Perfromance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Skins/default.aspx">Skins</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web/default.aspx">Web</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/ASPX+Page+Performance/default.aspx">ASPX Page Performance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>Nullable types and ?? operator</title><link>http://weblogs.asp.net/kannanambadi/archive/2008/06/06/nullable-types-and-operator.aspx</link><pubDate>Fri, 06 Jun 2008 11:48:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6252839</guid><dc:creator>kannan.ambadi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kannanambadi/rsscomments.aspx?PostID=6252839</wfw:commentRss><comments>http://weblogs.asp.net/kannanambadi/archive/2008/06/06/nullable-types-and-operator.aspx#comments</comments><description>&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; This time, i would like to discuss about a cool feature of C# 
2.0. As you know, some database operations return null values and results into 
throwing exceptions unless you handled well in your business logic. .Net 2.0 has 
been solved by introducing nullable types. Lets discuss about its features and 
functionalities.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Nullable type can represent all the values of its 
underlying type, plus the value &lt;b&gt;null&lt;/b&gt;. Thus, if you define a 
nullable boolean, its values comes from either true or false as well as Null. 
&lt;br&gt;For, nullable integer can be assigned from integer values and null. We can 
define a nullable type using its underlying datatype suffixed by a question mark 
symbol&lt;b&gt;(?)&lt;/b&gt;. Lets look at the examples &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Examples of nullable types&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Nullable values 
must be assigned with an initial value.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;span class="481532605-09062008"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;int&lt;/font&gt;? intNullable = 2;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;font color="#0000ff"&gt;double?&lt;/font&gt; dblNullable = 37.73;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;bool?&lt;/font&gt; bNullable = &lt;font color="#0000ff"&gt;true&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;Int[]?&lt;/font&gt; arNullable = new &lt;font color="#0000ff"&gt;int?&lt;/font&gt;&lt;font color="#000000"&gt;[1,2]; &lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;


&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Keep in mind that nullable types are applicable only to value 
types or an array of value types.&lt;/font&gt;&lt;font size="2"&gt;Referance types can't assinged to nullable types, 
since nullable types instances of System.Nullable(T) struct(here T is the type).&lt;/font&gt;&lt;font size="2"&gt; If u define a nullable string, it would result 
into compile-time error!!!!..&lt;/font&gt;&amp;nbsp;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &lt;br&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;b&gt;&lt;u&gt;Properties and Methods&lt;/u&gt;&lt;/b&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Nullable type has a property called HasValue, which determines whether 
the value contains null or not. Nullable types are very useful where you are 
interacting with databases, especially columns with null or empty values. There 
is very useful method associated with the Nullable types, GetValueOrDefault() 
which returns the value of the variable or default value in case of null(for eg: 
false for bool, 0 for integer, 0.0&amp;nbsp; for double). &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;u&gt;?? Operator&lt;/u&gt;&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Lets assume, you are accessing a table which has some columns with 
empty(undefined) values or null values. But still you want to fetch the data 
since the whole data is very large and time-consuming. Instead of showing those 
null values, it could be possible to display some predefined values to end user, 
there by making the data more understanding and readable. This feature can be 
achieved by using "??" operator. It simply allows you to assign a value to 
nullable type if the retrieved value is in fact null. The following code-snippet 
makes this feature more clear.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/font&gt;&lt;div&gt;&lt;font color="#008000" size="2"&gt;//Suppose you are executing a database 
operation&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#008000" size="2"&gt;&amp;nbsp;//which returns a null value instead of 
integer&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0000ff"&gt;
&lt;/font&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; Int 
GetMinimumCount()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;span class="998525005-09062008"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;int&lt;/font&gt;? iTemp = &lt;font color="#2b91af"&gt;ConfigManager&lt;/font&gt;.GetMinimumCount() ?? 100;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;span class="998525005-09062008"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/font&gt; iTemp.Value;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Nullable types are very useful when we are following ORM architecture(eg: 
nHibernate), where we would be dealing table fields are class members, so that 
the chance of getting null values very high compared to 3-Tier architecture. I 
hope you would get an idea about nullable types and its features. &lt;/font&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6252839" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/C_2300_+2.0/default.aspx">C# 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Nullable+types/default.aspx">Nullable types</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/microsoft/default.aspx">microsoft</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net+2.0/default.aspx">Asp.Net 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+2.0/default.aspx">.NET 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/ASP.NET+3.5/default.aspx">ASP.NET 3.5</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.net+development/default.aspx">.net development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/ORM+Architecture/default.aspx">ORM Architecture</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tools/default.aspx">Tools</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Performance/default.aspx">Performance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Code+Perfromance/default.aspx">Code Perfromance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web/default.aspx">Web</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/3-Tier+Architecture/default.aspx">3-Tier Architecture</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/C_2300_+Properties/default.aspx">C# Properties</category></item><item><title>Exporting Dataset as CSV</title><link>http://weblogs.asp.net/kannanambadi/archive/2008/03/25/exporting-dataset-as-csv.aspx</link><pubDate>Tue, 25 Mar 2008 10:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6023561</guid><dc:creator>kannan.ambadi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kannanambadi/rsscomments.aspx?PostID=6023561</wfw:commentRss><comments>http://weblogs.asp.net/kannanambadi/archive/2008/03/25/exporting-dataset-as-csv.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face="Trebuchet MS" size=2&gt;Hi Everyone,&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Trebuchet MS" size=2&gt;Below given an easy way to export data from a dataset as CSV(comma seperated values)&amp;nbsp;. At first, it converts the datatable to html table format and then writes data as output stream. We need to set the Content-Type of Response object as Excel format and add the filename to be streamed on the client browser in a dialog box&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Trebuchet MS" size=2&gt;Check this snippet&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Trebuchet MS" size=2&gt;&lt;/FONT&gt;&lt;FONT face="Trebuchet MS" size=2&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;private void ExportToCsvFromDataSet(&lt;FONT color=#339966&gt;DataSet &lt;/FONT&gt;dsExport) { &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;bool &lt;/FONT&gt;IsOutputStreamed = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;; &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;try { &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#339966&gt;StringBuilder &lt;/FONT&gt;dataToExport = &lt;FONT color=#0000ff&gt;new &lt;/FONT&gt;&lt;FONT color=#339966&gt;StringBuilder&lt;/FONT&gt;(); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#339966&gt;DataTable &lt;/FONT&gt;dtExport &lt;FONT color=#0000ff&gt;in &lt;/FONT&gt;dsExport.Tables) { &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;string &lt;/FONT&gt;headerToExport= &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.Empty; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;foreach &lt;/FONT&gt;(&lt;FONT color=#339966&gt;DataColumn &lt;/FONT&gt;dCol in dtExport.Columns) &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;headerToExport = (char)34 + dCol.ColumnName + (&lt;FONT color=#0000ff&gt;char&lt;/FONT&gt;)34 + (&lt;FONT color=#0000ff&gt;char&lt;/FONT&gt;)44; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;headerToExport.Remove(headerToExport.Length - 1, 1); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;headerToExport = headerToExport + &lt;FONT color=#339966&gt;Environment&lt;/FONT&gt;.NewLine + &lt;FONT color=#339966&gt;Environment&lt;/FONT&gt;.NewLine; &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;dataToExport.Append(headerToExport); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;string &lt;/FONT&gt;bodyToExport = &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.Empty; &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;foreach &lt;/FONT&gt;(&lt;FONT color=#339966&gt;DataRow &lt;/FONT&gt;dRow in dtExport.Rows) { &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;foreach &lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;object &lt;/FONT&gt;obj in dRow.ItemArray) &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;bodyToExport = bodyToExport + obj.&lt;FONT color=#0000ff&gt;ToString&lt;/FONT&gt;() + (char)44; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;bodyToExport.Remove(bodyToExport.Length - 1, 1);&lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;bodyToExport = bodyToExport + &lt;FONT color=#339966&gt;Environment&lt;/FONT&gt;.NewLine; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;} &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;dataToExport.Append(bodyToExport); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;dataToExport.Append(&lt;FONT color=#339966&gt;Environment&lt;/FONT&gt;.NewLine); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;dataToExport.Append(&lt;FONT color=#339966&gt;Environment&lt;/FONT&gt;.NewLine); &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;if &lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.IsNullOrEmpty(dataToExport.ToString())) { &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;Response.Clear(); &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;Response.ContentType = "Text/vnd.ms-excel"; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;Response.AddHeader("Content-Disposition", "attachment;filename=report.csv"); &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;Response.Write(dataToExport.ToString()); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;IsOutputStreamed = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;} &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;} &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;/FONT&gt;} &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;catch &lt;/FONT&gt;{ } &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;finally&lt;/FONT&gt; { &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#0000ff&gt;if &lt;/FONT&gt;(IsOutputStreamed) &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;Response.End(); &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;} &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;}&lt;/P&gt;
&lt;P&gt;Download the source code&lt;/P&gt;
&lt;P&gt;&lt;IFRAME style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 94px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 94px; BACKGROUND-COLOR: #ffffff" marginWidth=0 marginHeight=0 src="http://cid-7a9895268c9c00be.skydrive.live.com/embedgrid.aspx/GridExport" frameBorder=0 scrolling=no mce_src="http://cid-7a9895268c9c00be.skydrive.live.com/embedgrid.aspx/GridExport"&gt;&lt;/IFRAME&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6023561" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/csv/default.aspx">csv</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Response/default.aspx">Response</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Dataset/default.aspx">Dataset</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/GridView/default.aspx">GridView</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/C_2300_+2.0/default.aspx">C# 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/microsoft/default.aspx">microsoft</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net+2.0/default.aspx">Asp.Net 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+2.0/default.aspx">.NET 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.net+development/default.aspx">.net development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tools/default.aspx">Tools</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Performance/default.aspx">Performance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Code+Perfromance/default.aspx">Code Perfromance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web/default.aspx">Web</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/ASPX+Page+Performance/default.aspx">ASPX Page Performance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category></item><item><title>Simple way to check your code performance</title><link>http://weblogs.asp.net/kannanambadi/archive/2008/03/25/simple-way-to-check-your-code-performance.aspx</link><pubDate>Tue, 25 Mar 2008 08:15:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6022822</guid><dc:creator>kannan.ambadi</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/kannanambadi/rsscomments.aspx?PostID=6022822</wfw:commentRss><comments>http://weblogs.asp.net/kannanambadi/archive/2008/03/25/simple-way-to-check-your-code-performance.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;&lt;FONT face="Trebuchet MS"&gt;Hi guys,&lt;FONT size=2&gt;Of course, we all know &lt;B&gt;foreach &lt;/B&gt;loop takes more time than &lt;B&gt;for &lt;/B&gt;loop and there are lot of similar scenarios in .Net. Even if it takes lot of time, we'll be forced to use foreach loop at some cases. So it'll be better, if we come to know the time taken for executing a piece of code at the runtime. Here is a simple way to find out the time taken for each process.It just writes the start time and finish time taken for the process in the debug window. Debug.Indent() method simply changes the indentation of the Output by one level and Debug.WriteLine() method writes a string in the debug window.&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Here is the snippet&lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#339966&gt;//Increases the current IndentLevel&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;System.Diagnostics.&lt;FONT color=#33cccc&gt;Debug&lt;/FONT&gt;.Indent(); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#339966&gt;//Writes the starttime&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;System.Diagnostics.&lt;FONT color=#33cccc&gt;Debug&lt;/FONT&gt;.WriteLine("DEBUG START TIME -&amp;gt; : " + &lt;FONT color=#33cccc&gt;DateTime&lt;/FONT&gt;.Now.ToString("HH:mm s:fff")); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#339966&gt;//Execute the code &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;ConfigureControls(); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#339966&gt;//Writes the finish time&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;System.Diagnostics.&lt;FONT color=#33cccc&gt;Debug&lt;/FONT&gt;.WriteLine("DEBUG FINISH TIME -&amp;gt; : " + &lt;FONT color=#33cccc&gt;DateTime&lt;/FONT&gt;.Now.ToString("HH:mm s:fff")); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;FONT color=#339966&gt;//Reduces the current IndentLevel&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;System.Diagnostics.&lt;FONT color=#33cccc&gt;Debug&lt;/FONT&gt;.Unindent(); &lt;/P&gt;
&lt;P style="FONT-SIZE: 12px; FONT-FAMILY: Courier New"&gt;&lt;A href="http://weblogs.asp.net/blogs/kannanambadi/debuug1.jpg"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/kannanambadi/debuug1.jpg" border=0&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6022822" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/debug/default.aspx">debug</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/csv/default.aspx">csv</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Response/default.aspx">Response</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/C_2300_+2.0/default.aspx">C# 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/microsoft/default.aspx">microsoft</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Asp.Net+2.0/default.aspx">Asp.Net 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+2.0/default.aspx">.NET 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.net+development/default.aspx">.net development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web+Development/default.aspx">Web Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tools/default.aspx">Tools</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Performance/default.aspx">Performance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Code+Perfromance/default.aspx">Code Perfromance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Web/default.aspx">Web</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/ASPX+Page+Performance/default.aspx">ASPX Page Performance</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category><category domain="http://weblogs.asp.net/kannanambadi/archive/tags/Debugging/default.aspx">Debugging</category></item></channel></rss>