<?xml version="1.0" encoding="utf-8" standalone="yes"?><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/"><channel><title>博客园-维生素C.net</title><link>http://www.cnblogs.com/lovewangshu/</link><description>Talents come from diligence, and knowledge is gained by accumulation 天才源于勤奋，知识源于积累。难忘的1654天</description><language>zh-cn</language><lastBuildDate>Sat, 05 Jul 2008 04:50:02 GMT</lastBuildDate><pubDate>Sat, 05 Jul 2008 04:50:02 GMT</pubDate><ttl>60</ttl><item><title>[ie8特性1] 6个conection per domain的设计</title><link>http://www.cnblogs.com/lovewangshu/archive/2008/03/12/1102143.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 12 Mar 2008 06:53:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2008/03/12/1102143.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1102143.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2008/03/12/1102143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1102143.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1102143.html</trackback:ping><description><![CDATA[<p>作为www的传输协议，HTTP很简单：client与remote server建立connection，然后发送request，server处理这个request，返回response，然后关闭这个connection。</p> <p>但是这个如此简单的过程存在着一些问题：</p> <p>先看request:</p> <h5>GET /index.html HTTP/1.0 /*表明动作是GET,要获取的东东是/index.html*/<br>Accept: text/plain /*这里可以有n多的headers,在rfc822里有说明*/<br>Accept: text/html<br>Accept: */*<br>User-Agent: OnlyVC-1.0 /*客户端的实现名称*/</h5> <h5>server给出response:</h5> <h5>HTTP/1.0 200 OK <br>Server: MDMA/0.1 <br>MIME-version: 1.0 <br>Content-type: text/html <br>Last-Modified: Tue Mar 11 00:25:33 2008 <br>Content-Length: 2003 <br>/*注意,这里一定要有一个空行!*/<br>&lt;title&gt;OnlyVC.cn&lt;/title&gt;<br>&lt;h1&gt; welcome to OnlyVC.cn &lt;/h1&gt;.....</h5> <p>OK，到此为止，做web的人肯定都知道</p> <p>Next，我们可以借助像tcpdump等工具去看看HTTP，限于篇幅这里不粘贴数据了，我们可以把一个过程分成6个stage，在这个过程中需要注意一个重要的衡量指标：Round Trip Time（RTT），这个值时说一个packet从一端发送到另一端，然后再回来所用的时间。但是TCP有个很怪的毛病，简单来说就是建立连接时是先发几个小packet测测速度，然后再开始传输数据，这个过程叫做Slow Start。</p> <p>HTTP1.1是不需要等待一个packet发送过去然后被确认（acknowledged）了再发送下一个packet的，我们可以发送一个packet，不管它如何，再发送下一个。</p> <p>对于RFC里2 connection per hostname的设计在当时是合乎情理的，但是对于现在的Internet应用来说，已经远远不够了。但是反过来，作为一个website的开发者来看，对于一个页面使用的resources分布到多个hostname上还是有必要的，但是这个hostname的数量最好在2~4个为宜。如果页面有大量resources需要引用，尤其是对于产品较多的集合型网站，cookie的大小还是比较可观的，如果我们所有的内容都来自于一个域，假设1个页面有30张图片，cookie大小为20k，那就是有30*20=600k的东西被做了一次没用的传输，分布在其他hostname后是减少cookie-taking的一个好办法，因为cookie是有作用域的。</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1102143.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37541/" target="_blank">[新闻]FriendFeed介绍</a>]]></description></item><item><title>asp.net 3.5 extensions readme</title><link>http://www.cnblogs.com/lovewangshu/archive/2008/03/06/1093463.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Thu, 06 Mar 2008 05:17:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2008/03/06/1093463.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1093463.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2008/03/06/1093463.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1093463.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1093463.html</trackback:ping><description><![CDATA[<a href="http://www.asp.net/downloads/3.5-extensions/readme/">asp.net 3.5 extensions readme</a><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1093463.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37540/" target="_blank">[新闻]微软在台北发布新色鼠标产品</a>]]></description></item><item><title>Vista上无法使用WCF的处理方法</title><link>http://www.cnblogs.com/lovewangshu/archive/2008/01/11/1035472.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Fri, 11 Jan 2008 08:41:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2008/01/11/1035472.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1035472.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2008/01/11/1035472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1035472.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1035472.html</trackback:ping><description><![CDATA[<p><a href="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/VistaWCF_EA72/wcfOnVista_2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="386" alt="wcfOnVista" src="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/VistaWCF_EA72/wcfOnVista_thumb.png" width="439" border="0"></a> </p> <p>如果用IIS7勾选Windows Communication Foundation HTTP Activation</p> <p>之后IIS7的Handler Mapping里就会有:</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/VistaWCF_EA72/wcfOnVista1_2.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="49" alt="wcfOnVista1" src="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/VistaWCF_EA72/wcfOnVista1_thumb.jpg" width="363" border="0"></a> </p> <p>了</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1035472.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37539/" target="_blank">[新闻]Hitwise:雅虎流量来自Google搜索比来自雅虎搜索的还多</a>]]></description></item><item><title>SQL Server 2005 Management Studio假死的情况</title><link>http://www.cnblogs.com/lovewangshu/archive/2008/01/08/1029973.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Tue, 08 Jan 2008 02:41:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2008/01/08/1029973.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1029973.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2008/01/08/1029973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1029973.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1029973.html</trackback:ping><description><![CDATA[<p>昨天遇到了一个问题，就是当我往SQL Server 2005 Management Studio里paste一段超长的文本的时候，按下ctrl+v后迟迟没有反映，最后以我等不及了点X时的end responding告终。</p> <p>后来开始怀疑Text Editor的Word Wrap（我们都比较习惯这么用）会不会是从犯，结果一试——它是主谋！</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1029973.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37537/" target="_blank">[新闻]YouTube需提交用户信息 网民隐私或遭威胁</a>]]></description></item><item><title>Internal .Net Framework Data Provider error 6</title><link>http://www.cnblogs.com/lovewangshu/archive/2008/01/07/1028407.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Mon, 07 Jan 2008 01:39:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2008/01/07/1028407.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1028407.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2008/01/07/1028407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1028407.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1028407.html</trackback:ping><description><![CDATA[<p>在使用SQL Server 2005的database mirroring功能时遇到了Internal .Net Framework Data Provider error 6这个错误，发现没法立刻解决了，看完了<a href="http://support.microsoft.com/kb/944099">KB article 944099</a>后才知道要去自己去找ms的support要一个更新。至少到目前为止是这样的，遇到这个错误又想尽快解决问题的，我看还是先考虑换种方式，或者试试2008吧，2008我手头没有虚机，还没法测试</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1028407.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37535/" target="_blank">[新闻]纽约用户提前7天排队购iPhone</a>]]></description></item><item><title>查找含有特定字符的存储过程</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/12/29/1019643.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sat, 29 Dec 2007 03:23:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/12/29/1019643.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1019643.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/12/29/1019643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1019643.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1019643.html</trackback:ping><description><![CDATA[<p>select p.name, m.definition <br>from sys.procedures p inner join sys.sql_modules m <br>on p.object_id = m.object_id<br>where m.definition like '%150%' <p>感谢怡红公子</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1019643.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37534/" target="_blank">[新闻]财富：微软必然得到雅虎 是对抗Google唯一出路</a>]]></description></item><item><title>firefox, IE6, IE7在CSS hack上的入口点</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/12/29/1019529.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sat, 29 Dec 2007 02:37:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/12/29/1019529.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1019529.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/12/29/1019529.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1019529.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1019529.html</trackback:ping><description><![CDATA[<p>firefox认识!important</p> <p>IE7认识<strong>*</strong>和!important,而且!important还有<strong>优先级</strong>作用, 不认识<strong>_</strong></p> <p>IE6不认识!important,*和_的全认识</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1019529.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37534/" target="_blank">[新闻]财富：微软必然得到雅虎 是对抗Google唯一出路</a>]]></description></item><item><title>不知道多少人存在这个误解:</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/12/27/1016519.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Thu, 27 Dec 2007 02:39:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/12/27/1016519.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/1016519.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/12/27/1016519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/1016519.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/1016519.html</trackback:ping><description><![CDATA[<STRONG>
<OL>
<LI>When the script engine is shut down, garbage is collected. 
<LI>When <STRONG>256 variants</STRONG>, or <STRONG>more than 64KB of strings</STRONG>, or <STRONG>more than 4096 array</STRONG> slots have been allocated, the garbage collector sets a flag that says <STRONG>collect soon</STRONG>. 
<LI>Whenever a new statement is executed or the script debugger starts, that flag is checked, and if it is set, a collection is done.</LI></OL>
<P>看到这篇帖子的朋友不知道有多少人看过上面三条规则,如果你从搜索引擎搜索javascript delete object的话会经常看到上面这三条,但是这3条规则其实是针对Jscript的,跟javascript没有关系的<BR><BR>全文:<BR><BR>JScript </STRONG>uses a mark-and-sweep garbage collector with a variety of heuristics used to determine when to run garbage collection. The JScript garbage collector works like this: 
<P><IMG height=4 alt="" src="http://msdn.microsoft.com/msdnmag/images/dingbats/indent.gif" width=10>There is an undocumented JScript function called CollectGarbage that forces a garbage collection. This is for testing purposes only—do not ship code that calls this function. <STRONG>It is a poor programming practice to write code in JScript that depends on garbage collections being done at particular times</STRONG>. If you need predictable garbage collection, use a language that supports it (like Visual Basic® or VBScript). Note that all of this is the implementation detail of the engine and should not be relied upon because it may change in the future. <STRONG>Note also that the version of JScript supported by Microsoft® .NET will use the .NET Framework garbage collector</STRONG>, a multigenerational mark-and-sweep collector.<BR><IMG height=4 alt="" src="http://msdn.microsoft.com/msdnmag/images/dingbats/indent.gif" width=10>And remember, if you want a deterministic-lifetime app, use a deterministic-lifetime language like C++, Visual Basic 6.0, or VBScript; not an indeterministic-lifetime language like JScript, Scheme, or Java. If you're writing a program that depends on being able to have a deterministic object lifetime, JScript is not the right tool for the job. Trying to make it a deterministic-lifetime language will just create headaches down the road.</P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/1016519.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37533/" target="_blank">[新闻]分众无线剥离短信业务 裁员2/3</a>]]></description></item><item><title>Google Reader/Google Notebook使用以前的英文界面的办法</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/09/30/911535.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sun, 30 Sep 2007 01:42:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/09/30/911535.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/911535.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/09/30/911535.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/911535.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/911535.html</trackback:ping><description><![CDATA[Google的产品向来好用的，但是作到现在已经看不出认真两个字了，Google Reader中文版的翻译工作只能给予0分，把OK按钮都翻译成“良好”，一来说明Google Translate不好用，二来说明Google已经开始俗气了。<BR><BR>被强迫使用中文的朋友可以这样操作来使用英文版：<BR>Google Reader uses your general Google preferences for this. To change <BR>this setting, go to <A href="http://www.google.com/preferences" target=_blank rel=nofollow>http://www.google.com/preferences</A> and select your <BR>desired <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">language</B> from the drop-down menu. Then save the changes, go <BR>back to Reader, and you should be set. (Refresh the page if it doesn't <BR>change right away.) <BR><BR>是不是很werid？<BR><BR>原文地址：<A href="http://groups.google.com/group/google-reader-howdoi/browse_thread/thread/9ec2ce277d3bae4b/4f753e5e4261df64?lnk=gst&amp;q=language&amp;rnum=1">http://groups.google.com/group/google-reader-howdoi/browse_thread/thread/9ec2ce277d3bae4b/4f753e5e4261df64?lnk=gst&amp;q=language&amp;rnum=1</A><img src ="http://www.cnblogs.com/lovewangshu/aggbug/911535.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37532/" target="_blank">[新闻]传统新闻产业受新媒体冲击 面临动荡性调整</a>]]></description></item><item><title>编译IronRuby项目和修复其中的一些bugs</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/08/05/843620.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sun, 05 Aug 2007 04:16:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/08/05/843620.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/843620.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/08/05/843620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/843620.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/843620.html</trackback:ping><description><![CDATA[<P><STRONG><FONT face=Verdana size=2>编译：</FONT></STRONG></P>
<P><FONT face=Verdana size=2>1.下载了源代码，并且安装了.net framework</FONT></P>
<P><FONT face=Verdana size=2>2.因为.net framework安装时的bug，所以一定要检查一下%frameworkdir%，%frameworkversion%这两个环境变量的位置，我直接修改的build.cmd文件，使用了msbuild的绝对位置：</FONT></P>
<P><FONT face=Verdana size=2>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\msbuild.exe /p:Configuration=Release /t:Rebuild IronRuby.sln</FONT></P>
<P><FONT face=Verdana size=2>3.保存Build.cmd，在console下运行它，不出意外的话将成功编译。</FONT></P>
<P><STRONG><FONT face=Verdana size=2>测试一个bug：</FONT></STRONG><FONT face=Verdana size=2></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN>&nbsp;<SPAN style="COLOR: #000000">a</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">fanweixiao</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">2</SPAN>&nbsp;<SPAN style="COLOR: #000000"></SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">fanweixiao</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">3</SPAN>&nbsp;<SPAN style="COLOR: #000000">b</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">&nbsp;维生素C.net</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">4</SPAN>&nbsp;<SPAN style="COLOR: #000000"></SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">&nbsp;维生素C.net</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">5</SPAN>&nbsp;<SPAN style="COLOR: #000000">c</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">a</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">b<BR></SPAN><SPAN style="COLOR: #008080">6</SPAN>&nbsp;<SPAN style="COLOR: #000000"></SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">fanweixiao&nbsp;维生素C.net</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">7</SPAN>&nbsp;<SPAN style="COLOR: #000000">a<BR></SPAN><SPAN style="COLOR: #008080">8</SPAN>&nbsp;<SPAN style="COLOR: #000000"></SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">fanweixiao&nbsp;维生素C.net</SPAN><SPAN style="COLOR: #800000">"</SPAN></DIV>
<P>大家可以看到变量a也变成a+b了</FONT></P>
<P><FONT face=Verdana><FONT size=2><STRONG>修复这个bug</STRONG>：</FONT></FONT></P>
<P><FONT face=Verdana size=2>找到Ruby\Builtins\MutableStrings.cs的Concatenate(MutableString self, MutableString other)方法：</FONT></P>
<P><FONT face=Verdana size=2>很明显self.Append(other)会导致self自己发生改变，那么我们改写这个方法：</FONT></P>
<P><FONT face=Verdana size=2>再次编译运行rbx.exe，已经被修复了。</FONT></P>
<P><STRONG><FONT face=Verdana size=2>其他：</FONT></STRONG></P>
<P><FONT face=Verdana size=2>正如大家看到的一样，这只是一个Pre-Alpha版本，有许许多多的细节还不完善，不过如果想将其尽快应用上，有些文章能派上用场:</FONT></P><A href="http://sparcs.kaist.ac.kr/~tinuviel/download/IronRuby/patch-math" target=_blank><FONT face=Verdana size=2>FePy对math方面的修复和扩展</FONT></A><FONT face=Verdana size=2> </FONT>
<P><A href="http://www.hanselman.com/blog/WPFSampleInIronRubyTalkingViaCToWesabe.aspx"><FONT face=Verdana size=2>WPF Sample in IronRuby talking via C# to Wesabe</FONT></A></P>
<P><A href="http://weblogs.asp.net/scottgu/archive/2007/07/23/first-look-at-ironruby.aspx"><FONT face=Verdana size=2>IronRuby with .Net 3.x and Windows Presentation Foundation (WPF)</FONT></A></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/843620.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37531/" target="_blank">[新闻]微软Silverlight被指侵犯Gotuit三项专利</a>]]></description></item><item><title>IronRuby博客中文版-- IronRuby: a promising start</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/08/05/IronRuby_Blog.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sun, 05 Aug 2007 03:38:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/08/05/IronRuby_Blog.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/843583.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/08/05/IronRuby_Blog.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/843583.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/843583.html</trackback:ping><description><![CDATA[<P><FONT face=Verdana color=#eb2c0a size=2>IronRuby是Ruby语言在.net上的实现，该产品的负责人John Lam的博客在国内是不容易被访问到的，在联系了John后开始了其博客翻译的工作，如果您对Ruby语言和DLR感兴趣的话欢迎您的参与。</FONT></P>
<P><FONT face=Verdana size=2>在过去的几周里很高兴看到的许许多多对IronRuby的反映。感谢那些花时间尝试并却对它的好的方面和坏的方面评论的人们，看到这个变化尤其令我高兴：</FONT></P>
<P><A href="http://antoniocangiano.com/2007/07/26/is-ironruby-mathematically-challenged/" target=_blank><FONT face=Verdana size=2>Antonio Cangiano</FONT></A><FONT face=Verdana size=2>下载了源代码，顺利的编译了他们并且运行了快速测试（quick starts），他发现我们并没有正确的处理好显示类型转换而感到失望，例如：</FONT></P>
<BLOCKQUOTE>
<P><FONT face=Verdana size=2>1/3.0=&gt;0</FONT></P></BLOCKQUOTE>
<P><FONT face=Verdana size=2>再短短的几个小时之后， Seo Sanghyeon发布了一篇名为</FONT><A href="http://fepy.blogspot.com/2007/07/teaching-ironruby-math-tricks.html" target=_blank><FONT face=Verdana size=2>Teaching IronRuby Math tricks</FONT></A><FONT face=Verdana size=2>的博客，Seo不仅修复了源代码中的bugs，还花时间写了一篇关于开发者如何在源代码中使用他的patch的博客。</FONT></P>
<P><FONT face=Verdana size=2>Josh Nursing也不甘示弱，他写了一篇</FONT><A href="http://www.yashlabs.com/wp/?p=145" target=_blank><FONT face=Verdana size=2>详细的博客</FONT></A><FONT face=Verdana size=2>一步一步讲述了如何build这个项目（有截图的）[<A href="/lovewangshu/archive/2007/08/05/843620.html"><FONT color=#ff1493>相关翻译</FONT></A>]，同时他也修复了其中的一个bug， 并且一步步的讲述了他是如何做到的。</FONT></P>
<P><FONT face=Verdana size=2>这是我们刚刚诞生的社区的一个很好的开始，感谢你们的努力，我将花更多的时间在OSCON作出好的demo，告诉其他的开源开发者。从周一开始我们的team将要集中精力尽快在Rubyforge上公开我们的源代码，那是多么令人激动的时刻！<BR><BR><FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000>注：为了方便大家，我将</FONT><A href="/lovewangshu/archive/2007/07/30/IronRuby.html"><FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000><STRONG>IronRuby的源代码的下载</STRONG></FONT></A><FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000>放在了博客园。</FONT></FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/843583.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37531/" target="_blank">[新闻]微软Silverlight被指侵犯Gotuit三项专利</a>]]></description></item><item><title>IronRuby的下载</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/07/30/IronRuby.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Mon, 30 Jul 2007 08:36:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/07/30/IronRuby.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/836559.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/07/30/IronRuby.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/836559.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/836559.html</trackback:ping><description><![CDATA[<P>很多朋友无法访问John Lam的网站，我把下载包放在了博客园里，<A href="/Files/lovewangshu/IronRuby-Pre-Alpha1.zip">点击这里下载</A>。</P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/836559.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37530/" target="_blank">[新闻]Symbian开源:救赎,反击与未来</a>]]></description></item><item><title>http的基础知识帮助减少代码量和复杂度的一个Demo</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/07/19/823226.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 18 Jul 2007 16:41:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/07/19/823226.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/823226.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/07/19/823226.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/823226.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/823226.html</trackback:ping><description><![CDATA[<P>先看完RFC再看！<A href="/cnlamar/archive/2007/01/08/614671.html" target=_blank><FONT face="Courier New" size=2><BR><BR>action属性在asp.net ajax上看来似乎出了点问题</FONT></A><FONT face="Courier New" size=2>，今天看到了唐兄的这篇文章，加上前天学到的一个知识，拿出来跟大家分享一下：</FONT></P>
<P><FONT face="Courier New" size=2>朋友遇到这样一个场景：需要把页面的某个control的值post到另一个页面来显示。html的post是对整个form做post操作，当这个form中其他元素的value比较大时这个form的post此时就不经济了。如果仅仅想把一个type="text"的input的元素的值传送到另一个页面怎么办？使用querystring方式传值是受url约束的，使用ajax方式那么我们还要动手写一些代码，当然还受sandbox的约束。那么我们来看下面这个Demo：</FONT></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><FONT face="Courier New"><FONT size=2><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">form&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="form2"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;action</SPAN><SPAN style="COLOR: #0000ff">="show.aspx"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;method</SPAN><SPAN style="COLOR: #0000ff">="post"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;target</SPAN><SPAN style="COLOR: #0000ff">="mywindow"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></FONT></FONT><SPAN style="COLOR: #000000"><BR><FONT face="Courier New" size=2><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></FONT></SPAN><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="txtbox1"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;name</SPAN><SPAN style="COLOR: #0000ff">="txt1"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="text"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;value</SPAN><SPAN style="COLOR: #0000ff">="维生素C.net&nbsp;范维肖&nbsp;fanweixiao"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></FONT></FONT><SPAN style="COLOR: #000000"><BR><FONT face="Courier New" size=2><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></FONT></SPAN><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="Button1"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="button"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;value</SPAN><SPAN style="COLOR: #0000ff">="button"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;onclick</SPAN><SPAN style="COLOR: #0000ff">="doSubmit()"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></FONT></FONT><SPAN style="COLOR: #000000"><BR><FONT face="Courier New" size=2><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></FONT></SPAN><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">form</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></FONT></FONT><SPAN style="COLOR: #000000"><BR><FONT face="Courier New" size=2><IMG id=Codehighlighter1_260_354_Open_Image onclick="this.style.display='none'; Codehighlighter1_260_354_Open_Text.style.display='none'; Codehighlighter1_260_354_Closed_Image.style.display='inline'; Codehighlighter1_260_354_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_260_354_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_260_354_Closed_Text.style.display='none'; Codehighlighter1_260_354_Open_Image.style.display='inline'; Codehighlighter1_260_354_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></FONT></SPAN><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">script&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="text/javascript"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN id=Codehighlighter1_260_354_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN></FONT></FONT><SPAN id=Codehighlighter1_260_354_Open_Text><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><BR><FONT face="Courier New" size=2><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></FONT></SPAN><SPAN style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5"><FONT face="Courier New" size=2>function</FONT></SPAN><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;doSubmit()<BR><IMG id=Codehighlighter1_281_353_Open_Image onclick="this.style.display='none'; Codehighlighter1_281_353_Open_Text.style.display='none'; Codehighlighter1_281_353_Closed_Image.style.display='inline'; Codehighlighter1_281_353_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_281_353_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_281_353_Closed_Text.style.display='none'; Codehighlighter1_281_353_Open_Image.style.display='inline'; Codehighlighter1_281_353_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_281_353_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN></FONT></FONT><SPAN id=Codehighlighter1_281_353_Open_Text><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;window.open('','mywindow');<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.forms[</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">form2</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN></FONT></FONT><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><FONT face="Courier New" size=2>].submit();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</FONT></SPAN></SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><BR><FONT face="Courier New" size=2><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></FONT></SPAN></SPAN><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">script</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN></FONT></FONT></DIV>
<P><FONT face="Courier New" size=2>我们在Default.aspx中创建了一个form，指定了action到show.aspx页面，target指定了值mywindow。然后我们自己写了这个form的submit事件，首先window.open了一个空页面，并指定了与form的target相同的名字，然后让这个form提交。注意type="text"的input我们添加了name属性，并赋值为txt1。show.aspx页面的代码很简单：<BR></FONT></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><FONT face="Courier New"><FONT size=2><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">protected</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Page_Load(</SPAN><SPAN style="COLOR: #0000ff">object</SPAN></FONT></FONT><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<BR><IMG id=Codehighlighter1_53_96_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_96_Open_Text.style.display='none'; Codehighlighter1_53_96_Closed_Image.style.display='inline'; Codehighlighter1_53_96_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_53_96_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_96_Closed_Text.style.display='none'; Codehighlighter1_53_96_Open_Image.style.display='inline'; Codehighlighter1_53_96_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_53_96_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN></FONT></FONT><SPAN id=Codehighlighter1_53_96_Open_Text><FONT face="Courier New"><FONT size=2><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(Request[</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">txt1</SPAN><SPAN style="COLOR: #000000">"</SPAN></FONT></FONT><SPAN style="COLOR: #000000"><FONT face="Courier New" size=2>]);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</FONT></SPAN></SPAN><SPAN style="COLOR: #000000"><FONT face="Courier New" size=2>&nbsp;</FONT></SPAN></DIV>
<P><BR><FONT face="Courier New" size=2>这样我们就通过action+target两个属性将我们需要的value直接灌入到了打开的空页面中了。</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/823226.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37528/" target="_blank">[新闻]《福布斯》:暴雪的新一波完美风暴已经到来</a>]]></description></item><item><title>关于SQL Server的两个细节</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/07/18/821835.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Tue, 17 Jul 2007 16:04:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/07/18/821835.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/821835.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/07/18/821835.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/821835.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/821835.html</trackback:ping><description><![CDATA[<P>前段时间看到了园子的朋友在<A href="/yizhu2000/archive/2007/07/01/802275.html" target=_blank>讨论SQL Server的Paging Select问题</A>，在感觉到有些朋友可能对SQL Server（2000以上版本的）的一些地方还不太清楚，这里分享一下SQL Server自2000版本后提供的一些特色处理方式：</P>
<P><STRONG>TOP N排序</STRONG></P>
<P>新的TOP N引擎可以减少以往先sort再top n的负载，当数据读入到Storage Engine时就先过滤出top n的记录，然后在对这些记录进行sort等操作，这样的设计可以在大多数情况下提升效率，缩短查询时间。</P>
<P><STRONG>Merry-Go-Round Scans</STRONG></P>
<P>胡百敬老师在他一本讲解性能调教的书中将其翻译为旋转木马式扫描，这个算法用于处理相同数据的重复扫描。例如我们有一页数据，两个用户都去查询它们，如果都是从page的开始部分进行scan，假设当user A scan到30%的时候user B开始scan操作，那么当user A进行到60%的时候user B刚好完成30%，这种设计可能会导致在扫描大型数据表的时候引起硬盘的剧烈震动！而采用Merry-Go-Round方式，当user A scan到30%的时候user B开始从A的当前位置scan，user A完成整个操作时user B完成了70%，然后再从页首开始scan剩下的30%，这样他们就使用相同的查询计划读取了部分数据。这种方式减少了大量在极端时间内先后查询相同的数据时，系统I/O来回读取的的情况，在增强读取速度和无序扫描的同时，也不需要同步了。</P>
<P>Katmai在这两方面有没有更好的改进还不知道，我的SQL Server 2008<A href="/lovewangshu/archive/2007/06/26/796748.html" target=_blank>一直没法安装成功</A>，也没法尝试一下，明天准备做虚机再试一次，有相似经历的朋友已经解决问题的还请指教一下。</P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/821835.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37527/" target="_blank">[新闻]中国互联网公司在哪儿</a>]]></description></item><item><title>为LINQ提速的i4o和增强功能的SLINQ</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/06/28/798323.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 27 Jun 2007 17:40:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/06/28/798323.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/798323.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/06/28/798323.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/798323.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/798323.html</trackback:ping><description><![CDATA[<P><A href="http://www.codeplex.com/i4o" target=_blank><STRONG><FONT size=2>i4o</FONT></STRONG></A><FONT size=2>是对LINQ的一个扩展，通过允许我们在对象上添加“索引”来提高LINQ运算速度，作者号称使用i4o后速度提升often <STRONG>over one thousand</STRONG> times。</FONT></P>
<P><FONT size=2>我们在进行数据库查询优化时，往往第一想到的就是给Tables添加合适的Index来大幅度提升执行效率，i4o的实现也是类似这个方式，我们只要给class添加一个Indexable属性，然后使用IndexableCollection&lt;T&gt;来实现一个使用“索引”的类的集合就可以了，这样比起顺序性的搜索就在一定程度上提高了速度。<BR></FONT></P>
<P><FONT size=2>比如我们可以这样用：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG id=Codehighlighter1_54_181_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_181_Open_Text.style.display='none'; Codehighlighter1_54_181_Closed_Image.style.display='inline'; Codehighlighter1_54_181_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_54_181_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_181_Closed_Text.style.display='none'; Codehighlighter1_54_181_Open_Image.style.display='inline'; Codehighlighter1_54_181_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #000000">var&nbsp;customers&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;IndexableCollection</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">CnblogUser</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">()&nbsp;</SPAN><SPAN id=Codehighlighter1_54_181_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_54_181_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_86_116_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_116_Open_Text.style.display='none'; Codehighlighter1_86_116_Closed_Image.style.display='inline'; Codehighlighter1_86_116_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_86_116_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_116_Closed_Text.style.display='none'; Codehighlighter1_86_116_Open_Image.style.display='inline'; Codehighlighter1_86_116_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Customer&nbsp;</SPAN><SPAN id=Codehighlighter1_86_116_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_86_116_Open_Text><SPAN style="COLOR: #000000">{Key&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">,&nbsp;Name&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">fanweixiao</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">,<BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_148_179_Open_Image onclick="this.style.display='none'; Codehighlighter1_148_179_Open_Text.style.display='none'; Codehighlighter1_148_179_Closed_Image.style.display='inline'; Codehighlighter1_148_179_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_148_179_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_148_179_Closed_Text.style.display='none'; Codehighlighter1_148_179_Open_Image.style.display='inline'; Codehighlighter1_148_179_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Customer&nbsp;</SPAN><SPAN id=Codehighlighter1_148_179_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_148_179_Open_Text><SPAN style="COLOR: #000000">{Key&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">,&nbsp;Name&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">lovewangshu</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">;</SPAN></DIV><BR>
<P></P>i4o中对Where的扩展<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">extend&nbsp;the&nbsp;where&nbsp;when&nbsp;we&nbsp;are&nbsp;working&nbsp;with&nbsp;indexable&nbsp;collections!&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;IEnumerable</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;Where</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">&nbsp;IndexableCollection</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;sourceCollection,<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">Func</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&gt;&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;expr<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_247_2322_Open_Image onclick="this.style.display='none'; Codehighlighter1_247_2322_Open_Text.style.display='none'; Codehighlighter1_247_2322_Closed_Image.style.display='inline'; Codehighlighter1_247_2322_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_247_2322_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_247_2322_Closed_Text.style.display='none'; Codehighlighter1_247_2322_Open_Image.style.display='inline'; Codehighlighter1_247_2322_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_247_2322_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_247_2322_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">our&nbsp;indexes&nbsp;work&nbsp;from&nbsp;the&nbsp;hash&nbsp;values&nbsp;of&nbsp;that&nbsp;which&nbsp;is&nbsp;indexed,&nbsp;regardless&nbsp;of&nbsp;type</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">?</SPAN><SPAN style="COLOR: #000000">&nbsp;hashRight&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;noIndex&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">11</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">indexes&nbsp;only&nbsp;work&nbsp;on&nbsp;equality&nbsp;expressions&nbsp;here</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">12</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(expr.Body.NodeType&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;ExpressionType.Equal)<BR></SPAN><SPAN style="COLOR: #008080">13</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_547_1955_Open_Image onclick="this.style.display='none'; Codehighlighter1_547_1955_Open_Text.style.display='none'; Codehighlighter1_547_1955_Closed_Image.style.display='inline'; Codehighlighter1_547_1955_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_547_1955_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_547_1955_Closed_Text.style.display='none'; Codehighlighter1_547_1955_Open_Image.style.display='inline'; Codehighlighter1_547_1955_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_547_1955_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_547_1955_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">14</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">Equality&nbsp;is&nbsp;a&nbsp;binary&nbsp;expression</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">15</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BinaryExpression&nbsp;binExp&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(BinaryExpression)expr.Body;<BR></SPAN><SPAN style="COLOR: #008080">16</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">Get&nbsp;some&nbsp;aliases&nbsp;for&nbsp;either&nbsp;side</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">17</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression&nbsp;leftSide&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;binExp.Left;<BR></SPAN><SPAN style="COLOR: #008080">18</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression&nbsp;rightSide&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;binExp.Right;<BR></SPAN><SPAN style="COLOR: #008080">19</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">20</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hashRight&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;GetHashRight(leftSide,&nbsp;rightSide);<BR></SPAN><SPAN style="COLOR: #008080">21</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">22</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">if&nbsp;we&nbsp;were&nbsp;able&nbsp;to&nbsp;create&nbsp;a&nbsp;hash&nbsp;from&nbsp;the&nbsp;right&nbsp;side&nbsp;(likely)</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">23</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(hashRight.HasValue&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;HasIndexablePropertyOnLeft</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">(leftSide,sourceCollection))<BR></SPAN><SPAN style="COLOR: #008080">24</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_1086_1940_Open_Image onclick="this.style.display='none'; Codehighlighter1_1086_1940_Open_Text.style.display='none'; Codehighlighter1_1086_1940_Closed_Image.style.display='inline'; Codehighlighter1_1086_1940_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1086_1940_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1086_1940_Closed_Text.style.display='none'; Codehighlighter1_1086_1940_Open_Image.style.display='inline'; Codehighlighter1_1086_1940_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1086_1940_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1086_1940_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">25</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">cast&nbsp;to&nbsp;MemberExpression&nbsp;-&nbsp;it&nbsp;allows&nbsp;us&nbsp;to&nbsp;get&nbsp;the&nbsp;property</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">26</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemberExpression&nbsp;propExp&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(MemberExpression)leftSide;<BR></SPAN><SPAN style="COLOR: #008080">27</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;property&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;propExp.Member.Name;<BR></SPAN><SPAN style="COLOR: #008080">28</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dictionary</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">,&nbsp;List</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;myIndex&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">29</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sourceCollection.GetIndexByProperty(property);<BR></SPAN><SPAN style="COLOR: #008080">30</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(myIndex.ContainsKey(hashRight.Value))<BR></SPAN><SPAN style="COLOR: #008080">31</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_1516_1817_Open_Image onclick="this.style.display='none'; Codehighlighter1_1516_1817_Open_Text.style.display='none'; Codehighlighter1_1516_1817_Closed_Image.style.display='inline'; Codehighlighter1_1516_1817_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1516_1817_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1516_1817_Closed_Text.style.display='none'; Codehighlighter1_1516_1817_Open_Image.style.display='inline'; Codehighlighter1_1516_1817_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1516_1817_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1516_1817_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">32</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEnumerable</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;sourceEnum&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;myIndex[hashRight.Value].AsEnumerable</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">();<BR></SPAN><SPAN style="COLOR: #008080">33</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEnumerable</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;result&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sourceEnum.Where</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">(expr.Compile());<BR></SPAN><SPAN style="COLOR: #008080">34</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000">&nbsp;(T&nbsp;item&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;result)<BR></SPAN><SPAN style="COLOR: #008080">35</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;item;<BR></SPAN><SPAN style="COLOR: #008080">36</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">37</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;noIndex&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">we&nbsp;found&nbsp;an&nbsp;index,&nbsp;whether&nbsp;it&nbsp;had&nbsp;values&nbsp;or&nbsp;not&nbsp;is&nbsp;another&nbsp;matter</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">38</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">39</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">40</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">41</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(noIndex)&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">no&nbsp;index?&nbsp;&nbsp;just&nbsp;do&nbsp;it&nbsp;the&nbsp;normal&nbsp;slow&nbsp;way&nbsp;then<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">42</SPAN><SPAN style="COLOR: #008000"><IMG id=Codehighlighter1_2046_2311_Open_Image onclick="this.style.display='none'; Codehighlighter1_2046_2311_Open_Text.style.display='none'; Codehighlighter1_2046_2311_Closed_Image.style.display='inline'; Codehighlighter1_2046_2311_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2046_2311_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2046_2311_Closed_Text.style.display='none'; Codehighlighter1_2046_2311_Open_Image.style.display='inline'; Codehighlighter1_2046_2311_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_2046_2311_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_2046_2311_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">43</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEnumerable</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;sourceEnum&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sourceCollection.AsEnumerable</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">();<BR></SPAN><SPAN style="COLOR: #008080">44</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEnumerable</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;result&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sourceEnum.Where</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">T</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">(expr.Compile());<BR></SPAN><SPAN style="COLOR: #008080">45</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000">&nbsp;(T&nbsp;resultItem&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;result)<BR></SPAN><SPAN style="COLOR: #008080">46</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;resultItem;<BR></SPAN><SPAN style="COLOR: #008080">47</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">48</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">49</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN></DIV>
<P><BR><BR>而</FONT><A href="http://www.codeplex.com/Slinq" target=_blank><FONT size=2><STRONG>SLINQ</STRONG></FONT></A><FONT size=2>则是可以让LINQ作用于streaming data上的，目前这个项目只算是个Demo版本，实现方式是为LINQ添加了一系列的扩展方法，有兴趣的朋友可以down下sourcecode来看看，需要注意的是要安装Visual Studio Orcas beta 1。</FONT></P>
<P><FONT size=2>顺便帖两个codeplex上与LINQ相关的项目：</FONT></P>
<OL>
<LI><FONT size=2>LINQ是怎么来的？看</FONT><A href="http://www.codeplex.com/LINQSQO" target=_blank><FONT size=2>LINQ-SQO</FONT></A><FONT size=2> </FONT>
<LI><FONT size=2>在C++/CLI上用LINQ：</FONT><A href="http://www.codeplex.com/linqextensions" target=_blank><FONT size=2>LINQ Extensions</FONT></A></LI></OL><img src ="http://www.cnblogs.com/lovewangshu/aggbug/798323.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37526/" target="_blank">[新闻]微软:Silverlight内容也可被搜索引擎检索</a>]]></description></item><item><title>在Longhorn Server上无法安装SQL Server 2008 (Katmai)</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/06/26/796748.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Tue, 26 Jun 2007 11:40:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/06/26/796748.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/796748.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/06/26/796748.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/796748.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/796748.html</trackback:ping><description><![CDATA[<p>TITLE: Microsoft SQL Server code name Katmai Setup<br>------------------------------  <p>Upgrade Failed due to the following Error.The error code is :-2147467259.Message:Unspecified error  <p>For help, click: <a href="http://go.microsoft.com/fwlink?LinkID=20476&amp;ProdName=Microsoft+SQL+Server&amp;ProdVer=10.0.1019.17&amp;EvtSrc=setup.rll&amp;EvtID=29547&amp;EvtType=sqlca%5csqlxmlca.cpp%40Do_sqlCopyXML%40Do_sqlCopyXML%40x80004005">http://go.microsoft.com/fwlink?LinkID=20476&amp;ProdName=Microsoft+SQL+Server&amp;ProdVer=10.0.1019.17&amp;EvtSrc=setup.rll&amp;EvtID=29547&amp;EvtType=sqlca%5csqlxmlca.cpp%40Do_sqlCopyXML%40Do_sqlCopyXML%40x80004005</a> <p>&nbsp; <p>给出的连接地址也是一个没有任何作用的页面。希望有遇到这个错误的朋友帮助一下。</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/796748.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37525/" target="_blank">[新闻]内置AI技术 三星聪明微波炉还能上网</a>]]></description></item><item><title>设置Longhorn Server中的图片缩略图显示</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/06/16/785757.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sat, 16 Jun 2007 08:15:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/06/16/785757.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/785757.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/06/16/785757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/785757.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/785757.html</trackback:ping><description><![CDATA[<p>现在主要使用Longhorn Server了，如果想从一大堆图片中找到自己想要的没有缩略图还真不方便，问了两个朋友他们都不知道怎么调，记录以下。（最郁闷的是记得昨晚找过Folder Options了，没有发现这个选项....)</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/LonghornServer_D70E/SetLonghornThumbnailsView.jpg" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="SetLonghornThumbnailsView" src="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/LonghornServer_D70E/SetLonghornThumbnailsView_thumb.jpg" border="0"></a></p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/785757.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37524/" target="_blank">[新闻]盛大设文学公司 原新浪博客负责人侯小强任CEO</a>]]></description></item><item><title>关于控件部分的看法--读Programming ASP.NET中文版</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/03/12/671369.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sun, 11 Mar 2007 20:33:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/03/12/671369.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/671369.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/03/12/671369.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/671369.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/671369.html</trackback:ping><description><![CDATA[<P><FONT face=Verdana>读书一般先看目录，并且习惯性的从第三章开始看，除了胡百敬老师的书和代码大全外，其他见过的中文技术书籍无论是自己撰写的还是翻译的都清一色的在前两章添加N多基础知识，不管讲的好不好，第一次看一本书从第三章开始看都成了习惯。</FONT></P>
<P><FONT face=Verdana>同其他讲解asp.net的书一样，第三章是从控件开始讲起的，但是读罢此章，作者描述问题的思路和译者的翻译确实让我迷惑了很多，继续看完后面的章节，感觉作者刚下笔实在是太紧张，而且太想把asp.net介绍给一个从来没有接触过web开发的朋友了。</FONT></P>
<P><FONT face=Verdana>我们从<STRONG>另一个角度</STRONG>还看asp.net中的几种控件：asp.net server control, html server control, html control。</FONT></P>
<P><FONT face=Verdana>asp.net server control是最基础的asp.net组件，本书也使用了6章来介绍了常用的控件、2.0的新控件和控件开发的知识。而html的两种control和asp.net server control之间的关系如何理解呢？最简单的就是站在一个最高的角度来看——看它们最终在呈现到客户端浏览器的时候是什么。我们用下面这个<STRONG>很简单场景</STRONG>来看一下：</FONT></P>
<P><FONT face=Verdana>假设我们要用户输入用户名，点击提交按钮后服务器根据用户名从服务器获得用户的年龄然后显示在页面上。我们拖放上一个Textbox和一个Button，再放置并配置好一个验证控件就ok了。当我们使用验证控件的时候，asp.net会将起使用span标记和一堆控制样式的属性将<FONT color=#ff0000>*</FONT>呈现到页面上，而运行机制是用脚本控制的，这些脚本会自动根据用户的浏览器将适合该浏览器的代码一起发送到客户端上。</FONT></P>
<P><FONT face=Verdana>这时候我们运行这个页面，看其source code，很容易看出asp.net server button control就是一个type为submit的html input control。这时候我们再放置一个html control的button控件，然后将其属性加上runat="server"，再运行，然后看源代码，就可以看到他被render成一个type为button的html input control了。这时候点击两个控件中的任何一个都会造成页面提交（如果验证控件验证通过的话），作为submit的asp.net server control很容易理解为什么被会引发提交，那么html server control呢？是因为它调用的脚本里有__doPostBack('Button2',''),而页面里的__doPostBack()函数使得页面提交了。而加入了验证控件后，两者再提交前都是需要做数据检查的，使用的都是脚本来验证是否可以提交页面数据，但是方式是截然不同的：</FONT><FONT face=Verdana></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><FONT face="Courier New"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;</SPAN><STRONG><EM><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="submit"</SPAN></EM></STRONG><SPAN style="COLOR: #ff0000">&nbsp;name</SPAN><SPAN style="COLOR: #0000ff">="Button1"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;value</SPAN><SPAN style="COLOR: #0000ff">="Button"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<STRONG>onclick</STRONG></SPAN><SPAN style="COLOR: #0000ff">="javascript:WebForm_DoPostBackWithOptions(new&nbsp;WebForm_PostBackOptions(&amp;quot;Button1&amp;quot;,&nbsp;&amp;quot;&amp;quot;,&nbsp;true,&nbsp;&amp;quot;&amp;quot;,&nbsp;&amp;quot;&amp;quot;,&nbsp;false,&nbsp;false))"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;id</SPAN><SPAN style="COLOR: #0000ff">="Button1"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></FONT></DIV></FONT><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><FONT face="Courier New"><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;</SPAN><SPAN style="COLOR: #ff0000">language</SPAN><SPAN style="COLOR: #0000ff">="javascript"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<STRONG>onclick</STRONG></SPAN><SPAN style="COLOR: #0000ff">="if&nbsp;(typeof(Page_ClientValidate)&nbsp;==&nbsp;'function')&nbsp;Page_ClientValidate('');&nbsp;__doPostBack('Button2','')"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;name</SPAN><SPAN style="COLOR: #0000ff">="Button2"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<STRONG><EM>type</EM></STRONG></SPAN><SPAN style="COLOR: #0000ff"><STRONG><EM>="button"</EM></STRONG></SPAN><SPAN style="COLOR: #ff0000">&nbsp;id</SPAN><SPAN style="COLOR: #0000ff">="Button2"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;value</SPAN><SPAN style="COLOR: #0000ff">="button"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></FONT></DIV><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><FONT face="Courier New"><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">span&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="RequiredFieldValidator1"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;style</SPAN><SPAN style="COLOR: #0000ff">="color:Red;visibility:hidden;"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">Please enter your username</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">span</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></FONT></DIV>
<P><FONT face=Verdana>这时我们可以看到嵌入资源文件的脚本这样被使用了，但是如果想知道这些方法具体做了些什么可以借助fiddler、httpwatch或firebug这样的工具来看，不过最快捷的办法是在浏览器的地址栏敲入<EM>javascript:js_method_name</EM>来查看。比如javascript:WebForm_DoPostBackWithOptions就能看到该方法的内容了。</FONT></P>
<P><FONT face=Verdana>好，我们刚才从结果上入手，算是比较深入的看到了结果和客户端页面执行的过程，这时我们不妨再跳出来，<STRONG>重新审视</STRONG>一下这个过程：我们需要的是用户输入其username，然后我们根据该值从数据库里取出对应的年龄并显示在页面上，那么整个过程应该是用户数据姓名提交，服务器得到用户名，然后将年龄得到，返回给客户端。抛开http的信息来回传递的信息应该只有username和age，但是看看我们现在，是否传送了太多无用的数据？</FONT></P>
<P><FONT face=Verdana>那我们<STRONG>简化一下流程</STRONG>：我们全部使用html control来做，分别放置一个type为button和text的input控件，当button被点击时执行一个javascript function检验text里是否有字符然后将其发送到服务器，比如通过调用服务器段的一个web service，这个web服务在验证数据后将数据从database中取出，返回到客户端，在接受到数据后脚本将其呈现在页面上。</FONT></P>
<P><FONT face=Verdana>需要<STRONG>注意</STRONG>的是数据在客户端的验证是不可信的，通常情况下大多数浏览器通过地址栏就可以任意修改页面元素的值，所以在服务器做判断是必须要的。</FONT></P>
<P><FONT face=Verdana>这时候我们看两个过程简直是天壤之别，但是在开发效率和后期维护上也是天壤之别的。asp.net server control如果用不好，造成的后果就是灾难了。</FONT></P>
<P><FONT face=Verdana>看完此章的朋友们再看完了这篇抛的“砖”，然后将一个&lt;asp:Button..../&gt;中的runat="server"去掉，看看是什么结果？思考一下html被浏览器的解释是否能更清晰的认识到Control这个词呢？</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/671369.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37523/" target="_blank">[新闻]Gmail、Hotmail和Yahoo验证码被攻破</a>]]></description></item><item><title>分享一本入门级好书：Programming ASP.NET中文版</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/03/12/671364.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sun, 11 Mar 2007 19:14:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/03/12/671364.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/671364.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/03/12/671364.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/671364.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/671364.html</trackback:ping><description><![CDATA[<P><FONT face=Verdana size=2>年前拿到了Jesse Liberty和Dan Hurwitz合著的Programming ASP.NET（3rd Edtion）的中文版，现在已经看了一大半了。看到现在感觉这本书非常非常适合初学asp.net的朋友，但是如果只是看罢此书，还不能称的上是一个web developer，但是作为一本讲解asp.net 2.0和vs2005基础功能和快速开发的书籍，是相当推荐的。</FONT></P>
<P><FONT face=Verdana size=2>我们博客园新手Training团队和博文视点正在策划活动，这本价值99元的书将作为每期的奖品送给大家。由于在看的过程中实在是有很多想说的，有学到的新东西，也有想补充的，遂打算将自己的看书过程和心得一并记下，与大家一起分享。</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/671364.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37523/" target="_blank">[新闻]Gmail、Hotmail和Yahoo验证码被攻破</a>]]></description></item><item><title>555,又丢了一辆自行车</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/03/08/667518.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 07 Mar 2007 16:00:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/03/08/667518.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/667518.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/03/08/667518.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/667518.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/667518.html</trackback:ping><description><![CDATA[<P><FONT face=Verdana size=2>这次丢车没有很大失误了，去万客隆买吃的，一共10分钟左右，车子锁在栏杆上，40块钱买的锁，出来后没了。唉。不知道Jay Zhou丢了车子会不会写一首歌... ...</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/667518.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37520/" target="_blank">[新闻]史玉柱称花掉8亿美元不容易 坚持谨慎投资原则</a>]]></description></item><item><title>做人要真，该骂就骂。</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/02/04/639304.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Sat, 03 Feb 2007 20:01:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/02/04/639304.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/639304.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/02/04/639304.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/639304.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/639304.html</trackback:ping><description><![CDATA[<P><FONT face=Verdana size=2>妈的，我就想不明白了，为啥写blog就不能骂人？为啥骂人就是缺乏教养？我他妈骂得就不是人，你能算得上是人吗？我脾气就这样。<BR></FONT><A href="http://blog.joycode.com/juqiang/archive/2007/02/02/93150.aspx?Pending=true"><FONT face=Verdana size=2>http://blog.joycode.com/juqiang/archive/2007/02/02/93150.aspx?Pending=true</FONT></A><BR><FONT face=Verdana size=2>鞠强的一篇随意文章，我就一回复，操至于吗？<BR>竟然还有人再看我了的留言后劝我：你这样在大庭广众之下说这话，对以后不好。<BR>操，我今天就露露真面目！我就这么所谓的没教养。<BR>做人何必藏着窝着？我现在的工作也好，未来的工作也好，都是让我靠嘴吃饭的。攻击我的人不说脏话就体现出高贵素质来了？操，照样骂你！<BR>我就信一句话：做人要真，该骂就骂。</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/639304.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37519/" target="_blank">[新闻]我乐网(56.com)关停1月 套牢2亿风投</a>]]></description></item><item><title>结构体，值类型和接口</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/02/02/637653.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Thu, 01 Feb 2007 18:41:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/02/02/637653.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/637653.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/02/02/637653.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/637653.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/637653.html</trackback:ping><description><![CDATA[<P><FONT size=2>众所周知的.net的两种类型是值类型和引用类型，像C#中的int，enum和struct等，还有.net框架中System.Drawing下的Rectangle和point等类型也都是值类型的。很多解决面向对象不久的朋友似乎都会渐渐遗忘了struct等值类型，而是使用不合时宜的class来替代了。值类型有很多好处，比如它们的生存周期较短，并且很少会在多个客户之间共享，正因为这样，合适的使用值类型既提高了性能，又能缓解GC对内存的压力。</FONT></P>
<P><FONT size=2>以C#为例，值类型的方式可以有下面两种方式：</FONT></P>
<P><FONT size=2></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;length&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;length&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">);</SPAN></DIV>
<P>Visual C#的编译器会在stack上分配4bytes的空间来存储值，这样就可以被直接访问到，而不需要再重定向到managed heap上去了。使用new关键字只不过是C#出于一致性的考虑而作的，但是C#的一个特性就是对象的内存空间分配策略是用类型来定义的。</FONT></P>
<P><FONT size=2>看一个简单的程序：</FONT></P>
<P><FONT size=2></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Main<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_11_31_Open_Image onclick="this.style.display='none'; Codehighlighter1_11_31_Open_Text.style.display='none'; Codehighlighter1_11_31_Closed_Image.style.display='inline'; Codehighlighter1_11_31_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_11_31_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11_31_Closed_Text.style.display='none'; Codehighlighter1_11_31_Open_Image.style.display='inline'; Codehighlighter1_11_31_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_11_31_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_11_31_Open_Text><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;a</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>Show();<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Show()<BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">11</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_47_77_Open_Image onclick="this.style.display='none'; Codehighlighter1_47_77_Open_Text.style.display='none'; Codehighlighter1_47_77_Closed_Image.style.display='inline'; Codehighlighter1_47_77_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_47_77_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_47_77_Closed_Text.style.display='none'; Codehighlighter1_47_77_Open_Image.style.display='inline'; Codehighlighter1_47_77_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_47_77_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_47_77_Open_Text><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;a</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">7</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">12</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">13</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>Console.Write(a);<BR></SPAN><SPAN style="COLOR: #008080">14</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">15</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P>在这个过程中stack中的情况会是：</FONT></P>
<P><FONT size=2>1. int 9</FONT></P>
<P><FONT size=2>2. int 9, Show方法的返回地址，int 7</FONT></P>
<P><FONT size=2>3.int 9</FONT></P>
<P><FONT size=2>很清晰的可以看出，当Show()方法调用完毕后里面的值就被销毁了。</FONT></P>
<P><FONT size=2>但是，C#的参数默认是通过值传递的，如果上述的Show()方法变为Show(a)的话，那么stack中将有两个int 9了，作为参数传递进来的是Main()中变量a的copy，而且在Show()中只是用这个copy。随之而来的问题是，如果这时候a是一个复杂的struct，而且其中包含着大量的数据，那作为参数传递时候就会遇到的一个问题了：大型值类型作为参数传递就会牺牲一些性能了，尤其是struct，<STRONG>复制其中的每个值得开销会大大增加，特别是在方法被频繁调用的时候。</STRONG></FONT></P>
<P><FONT size=2>如何避免这个问题呢？</FONT></P>
<P><FONT size=2>先来考虑另一个我们在用值类型作为参数的时候的情景。当我们传递的参数希望在被处理后返回其状态的话，我们需要使用ref关键字，ref关键字大家是如此的熟悉以至于遇到这样的场景我们立刻就会不由自主的用上。为什么可以改变了原来的值呢？因为ref传递的是引用，既然是传递引用，那么就不会创建再复制出一个副本了，因此在使用大型值类型（尤其是struct）的时候，为了避免性能损耗，使用ref修饰会得到性能的提升，但是由此会带来的负面影响是要多多注意了--因为可以改变这个值了，而这是我们在这个场景中不期望的。</FONT></P>
<P><FONT size=2>interface的功能如此强大，如此的富有意义，<STRONG>值类型当然不会拒绝它</STRONG>。但是interface引用的对象肯定都是分配在heap上的，这个heap是在GC控制之下的，但是值类型肯定是分配在stack上的，这时候使用interface后会是什么样呢？肯定是通过boxing了。看下面的一段伪代码：</FONT></P>
<P><FONT size=2></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">interface</SPAN><SPAN style="COLOR: #000000">&nbsp;IA<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_14_28_Open_Image onclick="this.style.display='none'; Codehighlighter1_14_28_Open_Text.style.display='none'; Codehighlighter1_14_28_Closed_Image.style.display='inline'; Codehighlighter1_14_28_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_14_28_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_14_28_Closed_Text.style.display='none'; Codehighlighter1_14_28_Open_Image.style.display='inline'; Codehighlighter1_14_28_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_14_28_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_14_28_Open_Text><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;V</SPAN><SPAN id=Codehighlighter1_20_25_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_20_25_Open_Text><SPAN style="COLOR: #000000">{g;s；}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">struct</SPAN><SPAN style="COLOR: #000000">&nbsp;A:&nbsp;IA<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_45_92_Open_Image onclick="this.style.display='none'; Codehighlighter1_45_92_Open_Text.style.display='none'; Codehighlighter1_45_92_Closed_Image.style.display='inline'; Codehighlighter1_45_92_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_45_92_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_45_92_Closed_Text.style.display='none'; Codehighlighter1_45_92_Open_Image.style.display='inline'; Codehighlighter1_45_92_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_45_92_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_45_92_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;v;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_76_89_Open_Image onclick="this.style.display='none'; Codehighlighter1_76_89_Open_Text.style.display='none'; Codehighlighter1_76_89_Closed_Image.style.display='inline'; Codehighlighter1_76_89_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_76_89_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_76_89_Closed_Text.style.display='none'; Codehighlighter1_76_89_Open_Image.style.display='inline'; Codehighlighter1_76_89_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;V</SPAN><SPAN id=Codehighlighter1_76_89_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_76_89_Open_Text><SPAN style="COLOR: #000000">{g</SPAN><SPAN id=Codehighlighter1_78_82_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_78_82_Open_Text><SPAN style="COLOR: #000000">{..;}</SPAN></SPAN><SPAN style="COLOR: #000000">s</SPAN><SPAN id=Codehighlighter1_84_88_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_84_88_Open_Text><SPAN style="COLOR: #000000">{..;}</SPAN></SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><IMG src="http://www.cnblogs.com/images/dot.gif"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><IMG src="http://www.cnblogs.com/images/dot.gif">&nbsp;Main()<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_112_179_Open_Image onclick="this.style.display='none'; Codehighlighter1_112_179_Open_Text.style.display='none'; Codehighlighter1_112_179_Closed_Image.style.display='inline'; Codehighlighter1_112_179_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_112_179_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_112_179_Closed_Text.style.display='none'; Codehighlighter1_112_179_Open_Image.style.display='inline'; Codehighlighter1_112_179_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_112_179_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_112_179_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>A&nbsp;a&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;A();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>a.V&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>IA&nbsp;ia&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;a;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>Console.Write(ia.V);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>..<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P>结果肯定是输出了9。其中一个好玩的地方就是在Write()方法中a将会被boxing，ia引用了一个装箱对象，该对象包含了a的副本。</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/637653.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37518/" target="_blank">[新闻]微软七月安全公告预告:四个重要等级更新</a>]]></description></item><item><title>Debug Diagnostics Tool 1.0无法进行内存泄露监视的解决办法</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/02/02/637623.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Thu, 01 Feb 2007 17:24:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/02/02/637623.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/637623.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/02/02/637623.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/637623.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/637623.html</trackback:ping><description><![CDATA[<p>当使用IIS Diagnostics - Debug Diagnostics进行w3wp进程的memory leak进行分析的时候，单单create full-user dump是没有效果的，我们应该先让其monitor memory leak，但是今天在公司的windows 2003 server上却被告知不能monitor，随即询问了GTEC的牛人<a href="http://www.cnblogs.com/lixiong" target="_blank">lixiong</a>大虾，原因在于这里的设置：</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/DebugDiagnosticsTool1.0_1395/dbg%5B6%5D.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="150" src="http://www.cnblogs.com/images/cnblogs_com/lovewangshu/WindowsLiveWriter/DebugDiagnosticsTool1.0_1395/dbg_thumb%5B2%5D.png" width="449" border="0"></a> </p> <p>让人郁闷的是我在公司的2003和家里的xp上安装后该选项默认都没有被checked，但是在vista上安装的却是checked by default的。</p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/637623.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37518/" target="_blank">[新闻]微软七月安全公告预告:四个重要等级更新</a>]]></description></item><item><title>ICQ 6 Preview 邀请</title><link>http://www.cnblogs.com/lovewangshu/archive/2007/01/25/629782.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 24 Jan 2007 18:37:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2007/01/25/629782.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/629782.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2007/01/25/629782.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/629782.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/629782.html</trackback:ping><description><![CDATA[<p><font size="2">今天临晨终于搞到了ICQ 6 Preview的邀请，现在我有2个邀请名额，大家除了坚守到凌晨1点靠蜗牛般的网速来抢夺一次打开registration gate的机会不是那么容易的事，所以手头的这两个邀请显得也很珍贵了。现打算送给条件如下的朋友：<br>1.在博客园的文章有一定数量或一定质量(one of)的朋友。<br>2.拿到的两个邀请必须都发放给博客园的需要的朋友并且他们也必须满足此条要求的。<br>有需要的朋友请在评论中留下您的ICQ号（我不知道还有多少人使用ICQ，这是我用的第一款IM，后来也一直在用，而且ICQ6非常酷，除了将要在vista上发放的Yahoo xxxx之外）</font></p>
<p><font size="2">广告：让博客园的朋友先用上ICQ6，先用上的ICQ6的博客园的朋友再让更多的网友用上ICQ6。<br><br>暂放首页，早上11点前撤下，dudu见谅啦(搞这个邀请真的好麻烦...)~<br><br>p.s. 忍受不了这网速了，从microsoft上down那些symbols真的会让人疯掉的，debug不容易啊。推荐<a href="http://www.joycode.com/juqiang">鞠强</a>的blog。</font></p><img src ="http://www.cnblogs.com/lovewangshu/aggbug/629782.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37517/" target="_blank">[新闻]雅虎:一颗棋子的起落</a>]]></description></item><item><title>为什么在vista上做开发？</title><link>http://www.cnblogs.com/lovewangshu/archive/2006/12/14/591596.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 13 Dec 2006 18:03:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2006/12/14/591596.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/591596.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2006/12/14/591596.html#Feedback</comments><slash:comments>54</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/591596.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/591596.html</trackback:ping><description><![CDATA[<P><FONT face="Courier New" size=2>这一年多来Vista有不少版本都在我机器上借宿过,从早期巨慢无比到beta1时我的显卡也能跑Aero了.现在RTM Business版也占据了我的硬盘的一部分。但是无论什么时候，总是感觉在Vista上做开发是那么不爽。我不知道有多少朋友现在已经从XP跳到Vsita上了，我的XP还是最常用的。</FONT></P>
<P><FONT face="Courier New" size=2>升不升级我的机器？我的本子是Dell Inspiron 6400，512 DDR 667的内存还要被集成显卡分一杯羹。中午吃饭的时候说起想加条1G内存的想法，</FONT><A title=Lion href="/Lion/" target=_blank><FONT face="Courier New" size=2>我的PM</FONT></A><FONT face="Courier New" size=2>建议我如果资金不充足最好不要加，一来本子升级本身就花销大而且自身寿命较台式机短，其二是现在在vista上做开发与我的工作（asp.net开发为主）并不是必须的，也不是最好选择。</FONT></P>
<P><FONT face="Courier New" size=2>Web开发的两个主要方面——客户端和服务器端，大致上可以分别对应vista中的IE7和IIS7，两者也都是新东西。从IE5到IE6再到IE7，在对css样式控制上是折磨了很多UI设计人员，即要让页面代码结构清晰，还要保证页面布局不混乱，一个css样式写完了还要加不少hack方法来润色才能再更好的支持FF，Opera和Safari，往往一堆东西弄完了，通过xhtml strict的验证又是意见麻烦事，这时候再那出javascript来...每晚都得在恶梦中惊醒。<A href="http://blogs.msdn.com/ie/archive/2006/01/23/516393.aspx">不过IE7中对XMLHttpRequest的支持</A>却是帮了不少朋友的忙(<A href="http://blogs.msdn.com/ie/archive/2006/06/08/619507.aspx">tip</A>)。但是在开发/调试时就比较费尽了，首先就是启动速度明显减慢，然后是<A href="http://blogs.msdn.com/ie/archive/2005/05/26/422103.aspx">tab这个东西</A>(<A href="http://it.slashdot.org/article.pl?sid=05/05/27/2024244">more</A>)搞的IE经常假死，如果为了减少这种情况的影响多开两个，<A href="http://jeremy.zawodny.com/blog/archives/004791.html">内存占用多</A>又是个问题。HttpWatch我装了后没找到从哪里启动:( Fiddler是什么内容都取，占资源相对也多，一般不到迫不得已我不开它，小巧玲珑五脏俱全的<A href="http://www.httpwatch.com/">HttpWatch</A>是我的首选。调试javascript头疼，挂进vs2005里调试也不见得很有用，Firefox里的<A href="https://addons.mozilla.org/firefox/1843/">Firebug</A>在这上面表现的还不是太差，同样小巧玲珑。</FONT></P>
<P><FONT face="Courier New" size=2>服务器端的IIS7是微软产品组在web server上的一个巨大改变，新特性增加了不少，更紧密的结合asp.net2.0，在安装IIS7时的一堆选项就看的让人发晕。但是我还没有见过用IIS7做网站服务器的朋友，我在打算在服务器上试一下，如果有在用的朋友留个言，多传授俺些少走弯路的方法。</FONT></P>
<P><FONT face="Courier New" size=2>SQL Server 2005我没有在vista上装过，不过前两天看到鞠强大哥遇到了一些似乎不应该骚扰我们的<A href="http://blog.joycode.com/juqiang/archive/2006/12/09/88784.aspx">问题</A>。</FONT></P>
<P><FONT face="Courier New" size=2>OK，这样看来2003是我们做web开发的好选择了，对于windows应用程序呢?</FONT></P>
<P><FONT face="Courier New" size=2>WPF和WCF上的漂亮的APP据我现在知道的不一定必须在vista上做，XP/2003装上一堆东西后也是可以的，只是无法看到Aero的透明，而这个又不是开发者需要关心的（通常情况下），所以vista再次又不是winform程序的必须的开发平台，此时选择轻量级系统看起来似乎更好。</FONT></P>
<P><FONT face="Courier New" size=2>什么情况下用呢？<A href="http://bbs.sdpol.com/topic33587.html">QQ增加的登陆框密码保护功能轻松把vista就blue screen了</A>，我们得删除了那两个dll后才能用，而此时密码的保护功能就没了，看来腾讯的工程师们需要用vista来测试兼容性了。</FONT></P>
<P><FONT face="Courier New" size=2>剩下的就是需要使用vista上一些组件来做开发的朋友需要了，比如说<A href="http://www.microsoft.com/windowsvista/features/foreveryone/sidebar.mspx">windows sidebar</A>（我目前还不知道能否不用vista) 和 </FONT><A href="/lovewangshu/archive/2006/10/24/537820.html"><FONT face="Courier New" size=2>Windows RSS Platform</FONT></A><FONT face="Courier New" size=2>。</FONT></P>
<P><FONT face="Courier New" size=2>想到这里，我就决定坚守我现在的512内存，不转移开发平台了。园友们对待这个问题的看法是?......</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/591596.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37516/" target="_blank">[新闻]Firefox联合搜狐推出奥运浏览器</a>]]></description></item><item><title>Ubuntu 6.10</title><link>http://www.cnblogs.com/lovewangshu/archive/2006/11/30/577143.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 29 Nov 2006 17:48:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2006/11/30/577143.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/577143.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2006/11/30/577143.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/577143.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/577143.html</trackback:ping><description><![CDATA[<P><FONT face=Verdana size=2>前天下午快下班的时候王开源大哥送来了Ubuntu 6.10的CD，鲜红的底色显示着生机勃勃。接触Ubuntu有一段时间了，从hoary开始就装在了家里的老款联想本本上（533 CPU，当然是有些反映迟钝的），用了几天后实在是想亲切感受一下她的魅力，于是又装在家里的电脑上，直到国庆回家装vista才忍痛将其换下场，前几天跟老妈聊天，令我极为吃惊的是我只懂汉语的老妈竟然敲过来一行文字：新系统不如以前ubuntu好。我妈是只用电脑跟我聊天的，而且我妈妈连windows也拼不出来。</FONT></P>
<P><FONT face=Verdana size=2>Ubuntu在如此短的时间内能到岛这样的境界，Open是她的支柱，For human beings是她的灵魂。从12月2日开始，将是ubuntu在中国的火爆的开始。</FONT></P><img src ="http://www.cnblogs.com/lovewangshu/aggbug/577143.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37515/" target="_blank">[新闻]Google音乐搜索即将上线</a>]]></description></item><item><title>Applied Windows Live Custom Domains (2) - SDK简介</title><link>http://www.cnblogs.com/lovewangshu/archive/2006/11/30/Windows_Live_Custom_Domains_SDK_1.html</link><dc:creator>维生素C.NET</dc:creator><author>维生素C.NET</author><pubDate>Wed, 29 Nov 2006 17:48:00 GMT</pubDate><guid>http://www.cnblogs.com/lovewangshu/archive/2006/11/30/Windows_Live_Custom_Domains_SDK_1.html</guid><wfw:comment>http://www.cnblogs.com/lovewangshu/comments/577144.html</wfw:comment><comments>http://www.cnblogs.com/lovewangshu/archive/2006/11/30/Windows_Live_Custom_Domains_SDK_1.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovewangshu/comments/commentRss/577144.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovewangshu/services/trackbacks/577144.html</trackback:ping><description><![CDATA[<P><FONT face=Verdana size=2>今年中下旬微软公布了Windows Live Custom Domains的SDK。在上一篇对Windows Live Custom Domains的简单介绍的文章中我们看到了几张其网站操作界面的截图，获取有一些读者看过后也已经申请注册了自己的Windows Live Custom Domain了。但是对于中小企业来说，该SDK是非常有用的。</FONT></P>
<P><FONT face=Verdana size=2>Windows Live Custom Domains SDK除了能完成我们在web界面上可操作的功能外还增加了对用户列表的导出和导入，而这两个重要的功能是在web操作界面上所没有的，但却是企业用户所需要的。</FONT></P>
<P><FONT face=Verdana size=2>Windows Live Custom Domains SDK使用SOAP RPC 1.1标准来完成客户端程序和Windows Live Custom Domains web服务器</FONT><A title="ManageDomain Web Page" href="https://domains.live.com/service/managedomain.asmx" target=_blank><FONT face=Verdana size=2>提供的Web Services</FONT></A><FONT face=Verdana size=2>的交互，SDK里有关于每个方法的SOAP调用的详细说明文档。需要注意的是SDK不能作的是不能注册custom domain的服务和取消该服务。</FONT></P>
<P><FONT face=Verdana size=2>SDK中附带两个Sample,一个是Console的,另一个是Win32 app的.</FONT></P>
<P><FONT face=Verdana size=2>在进行任何的操作方法调用前,我们首先要做的是登陆认证。所有的连接到web服务的connection都需要用户已经登陆到Passwork Network中。该web services和Windows Live Custom Domains使用的是相同的用户认证，就是Microsoft Passport service，我们将在后面的sample分析中做稍微详细一点的说明。但是需要注意的是使用文本