<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>海鸟域 &#187; .net</title>
	<atom:link href="http://www.silenk.com/tag/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.silenk.com</link>
	<description>My territory, My way —— No Obstacle！</description>
	<lastBuildDate>Wed, 28 Apr 2010 12:28:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ASP.NET文件下载的几种方法</title>
		<link>http://www.silenk.com/asp-net-method-to-download/</link>
		<comments>http://www.silenk.com/asp-net-method-to-download/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 09:28:40 +0000</pubDate>
		<dc:creator>silenkee</dc:creator>
				<category><![CDATA[Asp.Net[C#]]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[下载]]></category>

		<guid isPermaLink="false">http://www.silenk.com/?p=64</guid>
		<description><![CDATA[    当服务器要提供文件下载时，HttpResponse有这么几种方法可以使用。

用Response.WriteFile，如：

1
2
Response.ContentType = &#34;application/octet-stream&#34;;
Response.WriteFile&#40;@&#34;whatever.zip&#34;&#41;;

采用aspnet2.0的新方法 Response.TransmitFile,注意此方法将指定的文件直接写入 HTTP 响应输出流，而不在内存中缓冲该文件。如：

1
2
3
Response.ContentType = &#34;application/x-zip-compressed&#34;;
Response.AddHeader&#40;&#34;Content-Disposition&#34;, &#34;attachment;filename=downloadfilename.zip&#34;&#41;;
Response.TransmitFile&#40;@&#34;whatever.zip&#34;&#41;;

(假设同文件夹下有个需要下载的文件叫whatever.zip，而用户下载时默认名称为downloadfilename.zip)
需要注意的是，我们都知道Server.ScriptTimeout 的默认值是90秒，而当我们在web.config中打开调试模式，此值变为30，000，000秒。这也是为什么我在开发时一般不会发现超时问题。当下载大文件时，用Response.WriteFile会使Aspnet_wp.exe缓存了太大空间而导致下载失败。
这时建议采用文件流形式。如：

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
System.IO.Stream iStream = null;
&#160;
        //以10K为单位缓存:
        byte&#91;&#93; buffer = new Byte&#91;10000&#93;;
&#160;
       int length;
&#160;
       long dataToRead;
&#160;
   [...]]]></description>
			<content:encoded><![CDATA[<p>    当服务器要提供文件下载时，HttpResponse有这么几种方法可以使用。<span id="more-64"></span></p>
<ol>
<li>用Response.WriteFile，如：</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">Response.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;application/octet-stream&quot;</span><span style="color: #008000;">;</span>
Response.<span style="color: #0000FF;">WriteFile</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;whatever.zip&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<li>采用aspnet2.0的新方法 Response.TransmitFile,注意此方法将指定的文件直接写入 HTTP 响应输出流，而不在内存中缓冲该文件。如：</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">Response.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;application/x-zip-compressed&quot;</span><span style="color: #008000;">;</span>
Response.<span style="color: #0000FF;">AddHeader</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Content-Disposition&quot;</span>, <span style="color: #666666;">&quot;attachment;filename=downloadfilename.zip&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Response.<span style="color: #0000FF;">TransmitFile</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;whatever.zip&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>(假设同文件夹下有个需要下载的文件叫whatever.zip，而用户下载时默认名称为downloadfilename.zip)</p>
<li>需要注意的是，我们都知道Server.ScriptTimeout 的默认值是90秒，而当我们在web.config中打开调试模式，此值变为30，000，000秒。这也是为什么我在开发时一般不会发现超时问题。当下载大文件时，用Response.WriteFile会使Aspnet_wp.exe缓存了太大空间而导致下载失败。</li>
<p>这时建议采用文件流形式。如：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">Stream</span> iStream <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//以10K为单位缓存:</span>
        <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> buffer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">Byte</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">10000</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
&nbsp;
       <span style="color: #FF0000;">int</span> length<span style="color: #008000;">;</span>
&nbsp;
       <span style="color: #FF0000;">long</span> dataToRead<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 制定文件路径.</span>
        <span style="color: #FF0000;">string</span> filepath <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;D:\mybigfile.zip&quot;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//  得到文件名.</span>
        <span style="color: #FF0000;">string</span> filename <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">Path</span>.<span style="color: #0000FF;">GetFileName</span><span style="color: #000000;">&#40;</span>filepath<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">try</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// 打开文件.</span>
            iStream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">FileStream</span><span style="color: #000000;">&#40;</span>filepath, <span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">FileMode</span>.<span style="color: #0000FF;">Open</span>,
                        <span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">FileAccess</span>.<span style="color: #0000FF;">Read</span>, <span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">FileShare</span>.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
            <span style="color: #008080; font-style: italic;">// 得到文件大小:</span>
            dataToRead <span style="color: #008000;">=</span> iStream.<span style="color: #0000FF;">Length</span><span style="color: #008000;">;</span>
&nbsp;
            Response.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;application/octet-stream&quot;</span><span style="color: #008000;">;</span>
            Response.<span style="color: #0000FF;">AddHeader</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Content-Disposition&quot;</span>, <span style="color: #666666;">&quot;attachment; filename=&quot;</span><span style="color: #008000;">+</span>filename<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>dataToRead <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//保证客户端连接</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Response.<span style="color: #0000FF;">IsClientConnected</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                   length <span style="color: #008000;">=</span> iStream.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, <span style="color: #FF0000;">10000</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                   Response.<span style="color: #0000FF;">OutputStream</span>.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>buffer, <span style="color: #FF0000;">0</span>, length<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                    Response.<span style="color: #0000FF;">Flush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                    buffer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">Byte</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">10000</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
                    dataToRead <span style="color: #008000;">=</span> dataToRead <span style="color: #008000;">-</span> length<span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">else</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #008080; font-style: italic;">//结束循环</span>
                    dataToRead <span style="color: #008000;">=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// 出错.</span>
            Response.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Error : &quot;</span> <span style="color: #008000;">+</span> ex.<span style="color: #0000FF;">Message</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">finally</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>iStream <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//关闭文件</span>
                iStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.silenk.com/asp-net-method-to-download/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>20条.net【C#】编码良好习惯</title>
		<link>http://www.silenk.com/20-tips-csharp-habit/</link>
		<comments>http://www.silenk.com/20-tips-csharp-habit/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 08:50:25 +0000</pubDate>
		<dc:creator>silenkee</dc:creator>
				<category><![CDATA[Asp.Net[C#]]]></category>
		<category><![CDATA[.net]]></category>

		<guid isPermaLink="false">http://www.silenk.com/?p=54</guid>
		<description><![CDATA[为了提高代码质量，经过搜索整理出以下20条，望共同进步！！！

  不要硬编string/ numeric，可以使用一些常量，例如：
不好的习惯：

1
2
3
4
5
6
7
8
9
static void Main&#40;string&#91;&#93; args&#41;
        &#123;
            int Count;
            Count = 100;
            if &#40;Count [...]]]></description>
			<content:encoded><![CDATA[<p><strong>为了提高代码质量，经过搜索整理出以下20条，望共同进步！！！</strong><span id="more-54"></span></p>
<ol>
<li>  不要硬编string/ numeric，可以使用一些常量，例如：</li>
<p>不好的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #FF0000;">int</span> Count<span style="color: #008000;">;</span>
            Count <span style="color: #008000;">=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Count <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// 执行一些操作</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>好点的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> ZERO <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            <span style="color: #FF0000;">int</span> Count<span style="color: #008000;">;</span>
            Count <span style="color: #008000;">=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Count <span style="color: #008000;">==</span> ZERO<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// 执行一些操作</span>
&nbsp;
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>  对于字符串比较-使用String. Empty ，而不是&#8221;"</li>
<li>  默认情况下将成员变量定义为 ‘private’，如果有需要，将其扩展为protected 、public 、 internal。</li>
<p>默认情况下使私人范围的优点是，在XMLSerilaization期间，默认情况下它会序列化的所有public成员。</p>
<li>  当我们要在循环操作字符串，使用StringBuilder，而不是字符串。</li>
<p>示例如下。<br />
不好的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">String</span>  temp <span style="color: #008000;">=</span> <span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span><span style="color: #000000;">&#40;</span> <span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">;</span> i<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                temp <span style="color: #008000;">+=</span> i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>好点的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">StringBuilder sb <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span> <span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">;</span> i<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                sb.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>i.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>  简单的操作，比起Collection更倾向使用Array</li>
<li>  比起ArrayList更倾向使用Generic Collection</li>
<li>  比起HashTable更倾向使用Generic Dictionary</li>
<li>  对于字符串的操作和存储，倾向与StringCollection和StringDictionary</li>
<li>  使用适合的数据类型。</li>
<p>例如：你想要判断状态，使用bool比int要好。<br />
不好的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">int</span> Check <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span> Check <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span> <span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// 执行一些操作</span>
&nbsp;
            <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>好点的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">bool</span> Check <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span>Check<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// 执行一些操作</span>
            <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>&nbsp;&nbsp;使用as做类型转换的时候，对转换后的值进行null值判断</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> A
   <span style="color: #000000;">&#123;</span>
&nbsp;
   <span style="color: #000000;">&#125;</span>
   <span style="color: #FF0000;">class</span> B <span style="color: #008000;">:</span> A
   <span style="color: #000000;">&#123;</span>
&nbsp;
   <span style="color: #000000;">&#125;</span>
    B objB <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> B<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    A objA1  <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>A<span style="color: #000000;">&#41;</span> objB<span style="color: #008000;">;</span>
    A objA2 <span style="color: #008000;">=</span> objB <span style="color: #0600FF;">as</span> A<span style="color: #008000;">;</span>
    <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span> objA2 <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
       <span style="color: #008080; font-style: italic;">//执行所需的操作</span>
     <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>&nbsp;&nbsp;创建wcf代理，使用using表达式</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span><span style="color: #000000;">&#40;</span>Cerate the proxy<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
      <span style="color: #008080; font-style: italic;">//执行所需的操作</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>&nbsp;&nbsp;对于昂贵的资源(例如Connection, File 等等)，遵照&#8217;Acquire late, release early’ (尽量晚的获取，尽量早的释放)准则。</li>
<p>例子：如果你想在数据操作时，使用的SqlConnection对象，请在方法级别，而不是在类级别创建实例。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> MyData
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> MyData<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">public</span> List GetAllCustomer<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">using</span> <span style="color: #000000;">&#40;</span>SqlConnection objConnection <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Connection string&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//执行一些操作得到需要的数据</span>
          <span style="color: #000000;">&#125;</span>
     <span style="color: #000000;">&#125;</span>
 <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>如果你想创建的类级别SqlConnection实例，确保您的类实现了IDisposable接口，并在Dispose()中清理SqlConnection实例。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> MyData <span style="color: #008000;">:</span> IDisposable
<span style="color: #000000;">&#123;</span>
    SqlConnection objConnection <span style="color: #008000;">;</span>
    <span style="color: #0600FF;">public</span> MyData<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
         objConnection <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Connection string&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">public</span> List GetAllCustomer<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">//通过objConnection得到需要的数据</span>
     <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Dispose<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">//清理SqlConnection实例</span>
          <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span> objConnection <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span> <span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
              <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span> objConnection.<span style="color: #0000FF;">State</span> <span style="color: #008000;">==</span> ConnectionState.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#41;</span>
              <span style="color: #000000;">&#123;</span>
                   objConnection.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
              <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>
     <span style="color: #000000;">&#125;</span>
 <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>&nbsp;&nbsp;如果你不想别人扩展你的类功能，使用‘sealed’。</li>
<li>&nbsp;&nbsp;避免为每个类都声明‘destructor’ ，因为它会增加不需要常驻内存的类的生命周期。</li>
<li>&nbsp;&nbsp;相对manual threading，更倾向用Thread Pool 。</li>
<li>&nbsp;&nbsp;在循环内不要去调用其它方法。</li>
<p>例如：</p>
<p>不好的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">for</span><span style="color: #000000;">&#40;</span> <span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    Calculate<span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>好点的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">for</span><span style="color: #000000;">&#40;</span> <span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">//直接写Calculate逻辑。</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>&nbsp;&nbsp;不要在循环内处理异常，而是将循环处理的逻辑放在try/catch里面</li>
<p>不好的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">for</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">;</span> i<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">try</span>
   <span style="color: #000000;">&#123;</span>
   <span style="color: #000000;">&#125;</span>
   <span style="color: #0600FF;">catch</span><span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
       <span style="color: #0600FF;">throw</span> ex<span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>好点的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">try</span>
<span style="color: #000000;">&#123;</span>
     <span style="color: #0600FF;">for</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">;</span> i<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;=</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
     <span style="color: #000000;">&#123;</span>
     <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">catch</span><span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">throw</span> ex<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>&nbsp;&nbsp;不用通过异常处理应用程序的逻辑</li>
<p>例如：</p>
<p>不好的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">try</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #FF0000;">int</span> x,y,z<span style="color: #008000;">;</span>
    x <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
    y <span style="color: #008000;">=</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span>
    z <span style="color: #008000;">=</span> y<span style="color: #008000;">/</span>x<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">catch</span><span style="color: #000000;">&#40;</span>DevideByZeroException ex<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">Throw</span> ex<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>好点的习惯：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">try</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #FF0000;">int</span> x,y,z<span style="color: #008000;">;</span>
    x <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
    y <span style="color: #008000;">=</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span> x <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span> <span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        z <span style="color: #008000;">=</span> y<span style="color: #008000;">/</span>x<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">catch</span><span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<li>&nbsp;&nbsp;相对 foreach，倾向使用for/while 循环</li>
<li>&nbsp;&nbsp;在层与层之间的交互，比起使用DataSet/DataTables更倾向于使用数据对象传递。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.silenk.com/20-tips-csharp-habit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
