<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/80600" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/80600" type="application/rss+xml"></fs:self_link><lastBuildDate>Thu, 26 Nov 2009 02:15:40 GMT</lastBuildDate><title>零度の博客</title><description>互联网信息大杂汇博客</description><link>http://www.80600.net/</link><language>zh-cn</language><copyright>Copyright 2005 PBlog3 v2.8</copyright><image><title>零度の博客</title><url>http://www.80600.net/images/logos.gif</url><link>http://www.80600.net/</link><description>零度の博客</description></image><item><title>将Windows 7从7100RC升级到7600正式版</title><link>http://www.80600.net/article.asp?id=347</link><description>大家知道微软Windows 7正式版是无法直接升级为Windows 7正式版的，并且不能在不同安装语言的版本（如从7100的英文版升级到7600的简体中文版）中来升级，他们给出解决的办法是全新安装了，而我又不想重新安装，这我就开始了改造系统已达到满足升级的条件。这种改造其实是很简单的过程，一共只需修改两个地方即可完成7100RC版到7600正式版的完美升级。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;今天中午在宿舍没事就想起摆弄一下电脑了，我就想把已经用了半年的7100更新为7600，我又想再不重新安装软件的情况下直接升级到7600正式版来，着我就开始了Windows 7系统的升级之路！&lt;br/&gt;&lt;br/&gt;大家知道微软Windows 7正式版是无法直接升级为Windows 7正式版的，并且不能在不同安装语言的版本（如从7100的英文版升级到7600的简体中文版）中来升级，他们给出解决的办法是全新安装了，而我又不想重 新安装，这我就开始了改造系统已达到满足升级的条件。这种改造其实是很简单的过程，一共只需修改两个地方即可完成7100RC版到7600正式版的完美升 级。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;（1）修改系统原始安装语言。&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Win+R 调出“运行”输入“regedit” (不包括引号)回车，打开注册表编辑器。依次展开[[HKEY_LOCAL_MACHINE＼SYSTEM＼ControlSet001＼Control＼Nls＼Language ]分支，在右侧窗口中找到这两个字符串值“Default和“InstallLanguage”，分别双击它们，在弹出的编辑对话框中将其数值数据修改为“0804&amp;#34;(即简体中文)，(默认是0409，即英文)单击“确定”按钮保存即可. 再重启一下，登陆Windows即可运行，此方法很简便。　　&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;（2）修改Windows 7系统安装镜像。&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;找到你即将要安装使用的Windows 7系统镜像，利用UltralISO软件打开你的这个镜像，展开sources目录，找到一个名叫“cversion.ini”的文件，并将其提取出来，使用文本编辑器修改里面的内容，修改为：&lt;br/&gt;&lt;br/&gt;[HostBuild]&lt;br/&gt;MinClient=7068.0&lt;br/&gt;MinServer=7100.0&lt;br/&gt;&lt;br/&gt;其原来的是：&lt;br/&gt;&lt;br/&gt;[HostBuild]&lt;br/&gt;MinClient=7233.0&lt;br/&gt;MinServer=7100.0&lt;br/&gt;&lt;br/&gt;上面的含义就是Windows 7升级只能从版本号大于Minclient的版本里升级，我们把它修改的小于当前版本7100即可被系统认为在可升级范围之内。将修改完成的文件保存，并 直接复制并覆盖系统原来的文件处即可。下来我们可以选择保存或者另存为一个新的系统镜像，我们可以把新改造的系统刻录成DVD也可以直接使用虚拟镜像工具 直接挂载在系统上来使用。&lt;br/&gt;&lt;br/&gt;在系统升级前，我们可以做的工作有，从微软官方下载Windows 7升级顾问，来验证系统中哪些文件或程序无法再升级以后的系统中使用或需要重新安装。当然这一步骤可以略去的，因为我们在运行Windows 7升级前，Windows 7系统光盘会自动运行程序检测工具来验证当前系统各个文件的兼容性，并会给出一个检测报告供你判别。&lt;br/&gt;&lt;br/&gt;剩下的步骤大家可以安装系统的提示进行吧！大家应该注意的是，升级系统可得花费很长的时间哦，你要有耐心才能完成此工作啊！我可是足足等了近2.5小时才完成的呢！&lt;br/&gt;&lt;br/&gt;我来讲一下系统直接升级的好处： 我是嫌重装系统比较麻烦，还得重新安装一大堆的软件，而直接升级的话就不会出现这样的问题了，原来系统的可悲升级 的软件都不会丢失，升级后可以直接使用，这样就很方便了!被Windows 7升级顾问评价为不兼容的软件将在升级后不会保留，请大家自行安装或者升级兼容版本！&lt;img src=&quot;http://www1.feedsky.com/t1/330970496/80600/feedsky/s.gif?r=http://www.80600.net/article.asp?id=347&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970496/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970496/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>技术教程</category><pubDate>Thu, 26 Nov 2009 10:15:40 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=347</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=347</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970496/5338990</fs:itemid></item><item><title>C# 递归无限级树型菜单</title><link>http://www.80600.net/article.asp?id=346</link><description>&lt;div class=&quot;UBBPanel codePanel&quot;&gt;&lt;div class=&quot;UBBTitle&quot;&gt;&lt;img src=&quot;http://www.80600.net/images/code.gif&quot; style=&quot;margin:0px 2px -3px 0px&quot; alt=&quot;程序代码&quot;/&gt; 程序代码&lt;/div&gt;&lt;div class=&quot;UBBContent&quot;&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected override void ShowPage()&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTable workTable = new DataTable(&amp;#34;Customers&amp;#34;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataColumn workCol = workTable.Columns.Add(&amp;#34;sortID&amp;#34;, typeof(Int32));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workCol.AllowDBNull = false;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workCol.AutoIncrement = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workCol.AutoIncrementSeed = 1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workCol.AutoIncrementStep = 1;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workCol.Unique = true;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Columns.Add(&amp;#34;sortName&amp;#34;, typeof(String));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Columns.Add(&amp;#34;parentID&amp;#34;, typeof(Int32));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Columns.Add(&amp;#34;level&amp;#34;, typeof(Int32));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Columns.Add(&amp;#34;sortPath&amp;#34;, typeof(String));&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow newRow = workTable.NewRow();&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortName&amp;#34;] = &amp;#34;国产手机&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;parentID&amp;#34;] = &amp;#34;0&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;level&amp;#34;] = &amp;#34;0&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortPath&amp;#34;] = &amp;#34;,1,&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Rows.Add(newRow);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow = workTable.NewRow();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortName&amp;#34;] = &amp;#34;国际手机&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;parentID&amp;#34;] = &amp;#34;0&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;level&amp;#34;] = &amp;#34;0&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortPath&amp;#34;] = &amp;#34;,2,&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Rows.Add(newRow);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow = workTable.NewRow();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortName&amp;#34;] = &amp;#34;诺基亚&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;parentID&amp;#34;] = &amp;#34;1&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;level&amp;#34;] = &amp;#34;1&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortPath&amp;#34;] = &amp;#34;,1,&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Rows.Add(newRow);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow = workTable.NewRow();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortName&amp;#34;] = &amp;#34;金立&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;parentID&amp;#34;] = &amp;#34;2&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;level&amp;#34;] = &amp;#34;1&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortPath&amp;#34;] = &amp;#34;,2,&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Rows.Add(newRow);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow = workTable.NewRow();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortName&amp;#34;] = &amp;#34;5800XM&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;parentID&amp;#34;] = &amp;#34;3&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;level&amp;#34;] = &amp;#34;2&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortPath&amp;#34;] = &amp;#34;,1,3,&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Rows.Add(newRow);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow = workTable.NewRow();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortName&amp;#34;] = &amp;#34;6100S&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;parentID&amp;#34;] = &amp;#34;3&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;level&amp;#34;] = &amp;#34;2&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortPath&amp;#34;] = &amp;#34;,1,3,&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Rows.Add(newRow);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow = workTable.NewRow();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortName&amp;#34;] = &amp;#34;A4&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;parentID&amp;#34;] = &amp;#34;4&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;level&amp;#34;] = &amp;#34;2&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newRow[&amp;#34;sortPath&amp;#34;] = &amp;#34;,2,4,&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;workTable.Rows.Add(newRow);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.StringBuilder sb = new System.Text.StringBuilder();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow[] rows = workTable.Sel&amp;#101;ct(&amp;#34;parentID=0&amp;#34;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (DataRow dr in rows)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendLine(&amp;#34;&amp;lt;div&amp;gt;&amp;#34; + dr[&amp;#34;sortName&amp;#34;] + &amp;#34;（&amp;#34; + dr[&amp;#34;sortPath&amp;#34;].ToString() + &amp;#34;）&amp;#34;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendLine(getSubNode(dr[&amp;#34;sortID&amp;#34;].ToString(), workTable));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.AppendLine(&amp;#34;&amp;lt;/div&amp;gt;&amp;#34;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(sb.ToString());&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private string getSubNode(string sortID, DataTable ATable)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.StringBuilder sb2 = new System.Text.StringBuilder();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow[] rows = ATable.Sel&amp;#101;ct(&amp;#34;[parentID]=&amp;#34; + sortID);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (DataRow dr in rows)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb2.AppendLine(&amp;#34;&amp;lt;li&amp;gt;&amp;#34; + dr[&amp;#34;sortName&amp;#34;] + &amp;#34;（&amp;#34; + dr[&amp;#34;sortPath&amp;#34;].ToString() + &amp;#34;）&amp;lt;/li&amp;gt;&amp;#34;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb2.AppendLine(getSubNode(dr[&amp;#34;sortID&amp;#34;].ToString(), ATable));&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return sb2.ToString();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970532/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970532/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>程序源码</category><pubDate>Fri, 17 Apr 2009 14:41:41 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=346</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=346</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970532/5338990</fs:itemid></item><item><title>网站前端优化的黄金法则</title><link>http://www.80600.net/article.asp?id=345</link><description>最近，YouMonitor.Us在做Web应用性能优化，在网上发现了文章High Performance Web Sites: The Importance of Front-End Performance，感觉其14条优化法则很实用，操作性很强。因此翻译出来，供大家参考。&lt;br/&gt;&lt;br/&gt;Web应用性能优化黄金法则：先优化前端程序(front-end)的性能，因为这是80%或以上的最终用户响应时间的花费所在。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则1. 减少HTTP请求次数&lt;/strong&gt;&lt;br/&gt;80%的最终用户响应时间花在前端程序上，而其大部分时间则花在各种页面元素，如图像、样式表、脚本和Flash等，的下载上。减少页面元素将会减少HTTP请求次数。这是快速显示页面的关键所在。&lt;br/&gt;&lt;br/&gt;一种减少页面元素个数的方法是简化页面设计。但是否存在其他方式，能做到既有丰富内容，又能获得快速响应时间呢？以下是这样一些技术：&lt;br/&gt;&lt;br/&gt;Image maps组合多个图片到一张图片中。总文件大小变化不大，但减少了HTTP请求次数从而加快了页面显示速度。该方式只适合图片连续的情况；同时坐标的定义是烦人又容易出错的工作。&lt;br/&gt;&lt;br/&gt;CSS Sprites是更好的方法。它可以组合页面中的图片到单个文件中，并使用CSS的background-image和background-position属性来现实所需的部分图片。&lt;br/&gt;&lt;br/&gt;Inline images使用data: URL scheme来在页面中内嵌图片。这将增大HTML文件的大小。组合inline images到你的（缓存）样式表是既能较少HTTP请求，又能避免加大HTML文件大小的方法。&lt;br/&gt;&lt;br/&gt;Combined files通过组合多个脚本文件到单一文件来减少HTTP请求次数。样式表也可采用类似方法处理。这个方法虽然简单，但没有得到大规模的使用。10大美国网站每页平均有7个脚本文件和2个样式表。当页面之间脚本和样式表变化很大时，该方式将遇到很大的挑战，但如果做到的话，将能加快响应时间。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;减少HTTP请求次数是性能优化的起点。这最提高首次访问的效率起到很重要的作用。据Tenni Theurer的文章Browser Cache Usage - Exposed!描述，40-60%的日常访问是首次访问，因此为首次访问者加快页面访问速度是用户体验的关键。&lt;br/&gt;&lt;br/&gt;我们的应用:&lt;br/&gt;&lt;br/&gt;外贸: 将首页的几十个小图标合并为一个，通过CSS控制它们的显示，减少了HTTP请求数。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则2. 使用CDN(Content Delivery Network, 内容分发网络)&lt;/strong&gt;&lt;br/&gt;用户离web server的远近对响应时间也有很大影响。从用户角度看，把内容部署到多个地理位置分散的服务器上将有效提高页面装载速度。但是该从哪里开始呢？&lt;br/&gt;&lt;br/&gt;作为实现内容地理分布的第一步，不要试图重构web应用以适应分布架构。改变架构将导致多个周期性任务，如同步session状态，在多个server之间复制数据库交易。这样缩短用户与内容距离的尝试可能被应用架构改版所延迟，或阻止。&lt;br/&gt;&lt;br/&gt;我们还记得80-90%的最终用户响应时间花在下载页面中的各种元素上，如图像文件、样式表、脚本和Flash等。与其花在重构系统这个困难的任务上，还不如先分布静态内容。这不仅能大大减少响应时间，而且由于CDN的存在，分布静态内容非常容易实现。&lt;br/&gt;&lt;br/&gt;CDN是地理上分布的web server的集合，用于更高效地发布内容。通常基于网络远近来选择给具体用户服务的web server。&lt;br/&gt;&lt;br/&gt;一些大型网站拥有自己的CDN，但是使用如Akamai Technologies, Mirror Image Internet, 或 Limelight Networks等CDN服务提供商的服务将是划算的。在Yahoo!把静态内容分布到CDN减少了用户影响时间20%或更多。切换到CDN的代码修改工作是很容易的，但能达到提高网站的速度。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;目前还没用到，不过据客户反映，广东山东等地网络情况比较差，如果可以将占据主要带宽的静态资源通过CDN发布，相信可以大大缓解目前网站访问速度的问题。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则3. 增加Expires Header&lt;/strong&gt;&lt;br/&gt;网页内容正变得越来越丰富，这意味着更多的脚本文件、样式表、图像文件和Flash。首次访问者将不得不面临多次HTTP请求，但通过使用Expires header，您可以在客户端缓存这些元素。这在后续访问中避免了不必要的HTTP请求。Expires header最常用于图像文件，但是它也应该用于脚本文件、样式表和Flash。&lt;br/&gt;&lt;br/&gt;浏览器（和代理）使用缓存来减少HTTP请求的次数和大小，使得网页加速装载。Web server通过Expires header告诉客户端一个元素可以缓存的时间长度。&lt;br/&gt;&lt;br/&gt;如果服务器是Apache的话，您可以使用ExpiresDefault基于当期日期来设置过期日期，如：&lt;br/&gt;&lt;br/&gt;ExpiresDefault “access plus 10 years” 设置过期时间为从请求时间开始计算的10年。&lt;br/&gt;&lt;br/&gt;请记住，如果使用超长的过期时间，则当内容改变时，您必须修改文件名称。在Yahoo!我们经常把改名作为release的一个步骤：版本号内嵌在文件名中，如yahoo_2.0.6.js。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;外贸：在Apache配置了JS,CSS,image的缓存，如果静态资源需要更新，则采用修改文件版本号的方案确保客户端取得最新版本；&lt;br/&gt;&lt;br/&gt;E网打尽：E网打尽的探头规则（JS）是根据客户的设置生成的，但是在相当长的一段时间内基本上不会有变化，因此，在生成规则的同时附加一个expires响应头，尽量减少客户端的请求和探头规则生成的次数。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则4. 压缩页面元素&lt;/strong&gt;&lt;br/&gt;通过压缩HTTP响应内容可减少页面响应时间。从HTTP/1.1开始，web客户端在HTTP请求中通过Accept-Encoding头来表明支持的压缩类型，如：&lt;br/&gt;&lt;br/&gt;Accept-Encoding: gzip, deflate.&lt;br/&gt;&lt;br/&gt;如果Web server检查到Accept-Encoding头，它会使用客户端支持的方法来压缩HTTP响应，会设置Content-Encoding头，如：Content-Encoding: gzip。&lt;br/&gt;&lt;br/&gt;Gzip是目前最流行及有效的压缩方法。其他的方式如deflate，但它效果较差，也不够流行。通过Gzip，内容一般可减少70%。如果是Apache，在1.3版本下需使用mod_gzip模块，而在2.x版本下，则需使用mod_deflate。&lt;br/&gt;&lt;br/&gt;Web server根据文件类型来决定是否压缩。大部分网站对HTML文件进行压缩。但对脚本文件和样式表进行压缩也是值得的。实际上，对包括XML和JSON在内的任务文本信息进行压缩都是值得的。图像文件和PDF文件不应该被压缩，因为它们本来就是压缩格式保存的。对它们进行压缩，不但浪费CPU，而且还可能增加文件的大小。&lt;br/&gt;&lt;br/&gt;因此，对尽量多的文件类型进行压缩是一种减少页面大小和提高用户体验的简便方法。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;外贸、E网打尽、K计划：600多K的ext2包，是人都会想到要去压缩它，压缩后的效果还不错，只有150多K。另外，JS、CSS、HTML也尽量压缩，要知道我们的很多客户还在使用1M的ADSL。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则5. 把样式表放在头上&lt;/strong&gt;&lt;br/&gt;我们发现把样式表移到HEAD部分可以提高界面加载速度，因此这使得页面元素可以顺序显示。&lt;br/&gt;&lt;br/&gt;在很多浏览器下，如IE，把样式表放在document的底部的问题在于它禁止了网页内容的顺序显示。浏览器阻止显示以免重画页面元素，那用户只能看到空白页了。Firefox不会阻止显示，但这意味着当样式表下载后，有些页面元素可能需要重画，这导致闪烁问题。&lt;br/&gt;&lt;br/&gt;HTML规范明确要求样式表被定义在HEAD中，因此，为避免空白屏幕或闪烁问题，最好的办法是遵循HTML规范，把样式表放在HEAD中。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;目前还没有碰到把样式表放在文档后面的情况吧？&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则6. 把脚本文件放在底部&lt;/strong&gt;&lt;br/&gt;与样式文件一样，我们需要注意脚本文件的位置。我们需尽量把它们放在页面的底部，这样一方面能顺序显示，另方面可达到最大的并行下载。&lt;br/&gt;&lt;br/&gt;浏览器会阻塞显示直到样式表下载完毕，因此我们需要把样式表放在HEAD部分。而对于脚本来说，脚本后面内容的顺序显示将被阻塞，因此把脚本尽量放在底部意味着更多内容能被快速显示。&lt;br/&gt;&lt;br/&gt;脚本引起的第二个问题是它阻塞并行下载数量。HTTP/1.1规范建议浏览器每个主机的并行下载数不超过2个。因此如果您把图像文件分布到多台机器的话，您可以达到超过2个的并行下载。但是当脚本文件下载时，浏览器不会启动其他的并行下载，甚至其他主机的下载也不启动。&lt;br/&gt;&lt;br/&gt;在某些情况下，不是很容易就能把脚本移到底部的。如，脚本使用document.write方法来插入页面内容。同时可能还存在域的问题。不过在很多情况下，还是有一些方法的。&lt;br/&gt;&lt;br/&gt;一个备选方法是使用延迟脚本（deferred script）。DEFER属性表明脚本未包含document.write，指示浏览器刻继续显示。不幸的是，Firefox不支持DEFER属性。在IE中，脚本可能被延迟执行，但不一定得到需要的长时间延迟。不过从另外角度来说，如果脚本能被延迟执行，那它就可以被放在底部了。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;这点之前大家可能都没有意识到，不过在我们的XCube XUI中我们已经实施了这条法则，相信可以进一步提升页面的访问性能。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则7. 避免CSS表达式&lt;/strong&gt;&lt;br/&gt;CSS表达式是功能强大的(同时也是危险的)用于动态设置CSS属性的方式。IE，从版本5开始支持CSS表达式，如backgourd-color: e&amp;#173;xpression((new Date()).getHours()%2?”#B8D4FF”:”#F08A00”)，即背景色每个小时切换一次。&lt;br/&gt;&lt;br/&gt;CSS表达式的问题是其执行次数超过大部分人的期望。不仅页面显示和resize时计算表达式，而且当页面滚屏，甚至当鼠标在页面上移动时都会重新计算表达式。&lt;br/&gt;&lt;br/&gt;一种减少CSS表达式执行次数的方法是一次性表达式，即当第一次执行时就以明确的数值代替表达式。如果必须动态设置的话，可使用事件处理函数代替。如果您必须使用CSS表达式的话，请记住它们可能被执行上千次，从而影响页面性能。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;目前CSS的维护工作主要由UI人员负责，他们已经尽量在避免这种情况了。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则8. 把JavaScript和CSS放到外部文件中&lt;/strong&gt;&lt;br/&gt;上述很多性能优化法则都基于外部文件进行优化。现在，我们必须问一个问题：JavaScript和CSS应该包括在外部文件，还是在页面文件中？&lt;br/&gt;&lt;br/&gt;在现实世界中，使用外部文件会加快页面显示速度，因为外部文件会被浏览器缓存。如果内置JavaScript和CSS在页面中虽然会减少HTTP请求次数，但增大了页面的大小。另外一方面，使用外部文件，会被浏览器缓存，则页面大小会减小，同时又不增加HTTP请求次数。&lt;br/&gt;&lt;br/&gt;因此，一般来说，外部文件是更可行的方式。唯一的例外是内嵌方式对主页更有效，如Yahoo!和My Yahoo!都使用内嵌方式。一般来说，在一个session中，主页访问此时较少，因此内嵌方式可以取得更快的用户响应时间。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;外贸、E网打尽、K计划：ext2的代码作了很好的引导，目前前端开发人员都非常注意客户端模块的封装、重用，尽量以外部JS的方式提高代码的重用度，当然也要注意不要引入过多的外部资源，因为这违反了法则1。&lt;br/&gt;目前CSS的封装也不错，但是主要是针对IE系列的解决方案，可以考虑引入YAML、blueprint等CSS框架，轻松解决浏览器兼容性问题。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则9. 减少DNS查询次数&lt;/strong&gt;&lt;br/&gt;DNS用于映射主机名和IP地址，一般一次解析需要20～120毫秒。为达到更高的性能，DNS解析通常被多级别地缓存，如由ISP或局域网维护的caching server，本地机器操作系统的缓存（如windows上的DNS Client Service），浏览器。IE的缺省DNS缓存时间为30分钟，Firefox的缺省缓冲时间是1分钟。&lt;br/&gt;&lt;br/&gt;减少主机名可减少DNS查询的次数，但可能造成并行下载数的减少。避免DNS查询可减少响应时间，而减少并行下载数可能增加响应时间。一个可行的折中是把内容分布到至少2个，最多4个不同的主机名上。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;外贸：为了绕开浏览器对下载线程数的限制，我们对静态资源启用了多域名，但是这么做违反了该法则。不过，对windows IE来说，DNS的缓存可以缓解该问题。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则10. 最小化JavaScript代码&lt;/strong&gt;&lt;br/&gt;最小化JavaScript代码指在JS代码中删除不必要的字符，从而降低下载时间。两个流行的工具是JSMin 和YUI Compressor。&lt;br/&gt;&lt;br/&gt;混淆是最小化于源码的备选方式。象最小化一样，它通过删除注释和空格来减少源码大小，同时它还可以对代码进行混淆处理。作为混淆的一部分，函数名和变量名被替换成短的字符串，这使得代码更紧凑，同时也更难读，使得难于被反向工程。Dojo Compressor (ShrinkSafe)是最常见的混淆工具。&lt;br/&gt;&lt;br/&gt;最小化是安全的、直白的过程，而混淆则更复杂，而且容易产生问题。从对美国10大网站的调查来看，通过最小化，文件可减少21%，而混淆则可减少25%。&lt;br/&gt;&lt;br/&gt;除了最小化外部脚本文件外，内嵌的脚本代码也应该被最小化。即使脚本根据法则4被压缩后传输，最小化脚本刻减少文件大小5%或更高。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;我们没有直接使用JS压缩，但是我们用的许多组件例如ext2、jquery等，已经在为我们实践该法则。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则11. 避免重定向&lt;/strong&gt;&lt;br/&gt;重定向功能是通过301和302这两个HTTP状态码完成的，如：&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/1.1 301 Moved Permanently&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Location: &lt;a href=&quot;http://example.com/newuri&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://example.com/newuri&lt;/a&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Content-Type: text/html&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;浏览器自动重定向请求到Location指定的URL上，重定向的主要问题是降低了用户体验。&lt;br/&gt;&lt;br/&gt;一种最耗费资源、经常发生而很容易被忽视的重定向是URL的最后缺少/，如访问&lt;a href=&quot;http://astrology.yahoo.com/astrology&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://astrology.yahoo.com/astrology&lt;/a&gt;将被重定向到&lt;a href=&quot;http://astrology.yahoo.com/astrology/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://astrology.yahoo.com/astrology/&lt;/a&gt;。在Apache下，可以通过Alias，mod_rewrite或DirectorySlash等方式来解决该问题。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;经验丰富的SA已经为我们考虑了这个问题，有兴趣的同学可以看看线上环境的Apache配置文件：httpd.conf。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则12. 删除重复的脚本文件&lt;/strong&gt;&lt;br/&gt;在一个页面中包含重复的JS脚本文件会影响性能，即它会建立不必要的HTTP请求和额外的JS执行。&lt;br/&gt;&lt;br/&gt;不必要的HTTP请求发生在IE下，而Firefox不会产生多余的HTTP请求。额外的JS执行，不管在IE下，还是在Firefox下，都会发生。&lt;br/&gt;&lt;br/&gt;一个避免重复的脚本文件的方式是使用模板系统来建立脚本管理模块。除了防止重复的脚本文件外，该模块还可以实现依赖性检查和增加版本号到脚本文件名中，从而实现超长的过期时间。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;旧版本的Xplatform中这个问题比较严重，不过相信新版的XCube不会重蹈覆辙。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则13. 配置ETags&lt;/strong&gt;&lt;br/&gt;ETags是用于确定浏览器缓存中元素是否与Web server中的元素相匹配的机制，它是比last-modified date更灵活的元素验证机制。ETag是用于唯一表示元素版本的字符串，它需被包括在引号中。Web server首先在response中指定ETag：&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/1.1 200 OK&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ETag: &amp;#34;10c24bc-4ab-457e1c1f&amp;#34;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Content-Length: 12195&lt;br/&gt;后来，如果浏览器需要验证某元素，它使用If-None-Match头回传ETag给Web server，如果ETag匹配，则服务器返回304代码，从而节省了下载时间：&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GET /i/yahoo.gif HTTP/1.1&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Host: us.yimg.com&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If-None-Match: &amp;#34;10c24bc-4ab-457e1c1f&amp;#34;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTP/1.1 304 Not Modified&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;ETags的问题在于它们是基于服务器唯一性的某些属性构造的，如Apache1.3和2.x，其格式是inode-size-timestamp，而在IIS5.0和6.0下，其格式是Filetimestamp:ChangeNumber。这样同一个元素在不同的web server上，其ETag是不一样的。这样在多Web server的环境下，浏览器先从server1请求某元素，后来向server2验证该元素，由于ETag不同，所以缓存失效，必须重新下载。&lt;br/&gt;&lt;br/&gt;因此，如果您未用到ETags系统提供的灵活的验证机制，最好删除ETag。删除ETag会减少http response及后续请求的HTTP头的大小。微软支持文章描述了如何删除ETags，而在Apache下，只要在配置文件中设置FileETag none即可。&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;E网打尽：自定义ETag的生成策略，以尽量减少探头规则的生成次数。由于不是采用服务器默认的ETag，不存在该问题。&lt;br/&gt;&lt;br/&gt;其他产品线：要注意了，这点大家都没有关注过吧，赶快检查一下Apache中的配置。&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;法则14. 缓存Ajax&lt;/strong&gt;&lt;br/&gt;性能优化法则同样适用于web 2.0应用。提高Ajax的性能最重要的方式是使得其response可缓存，就象“法则3增加Expires Header”讨论的那样。以下其他法则同样适用于Ajax，当然法则3是最有效的方式:&lt;br/&gt;&lt;br/&gt;法则4. 压缩页面元素&lt;br/&gt;&lt;br/&gt;法则9. 减少DNS查询次数&lt;br/&gt;&lt;br/&gt;法则10. 最小化脚本文件&lt;br/&gt;&lt;br/&gt;法则11. 避免重定向&lt;br/&gt;&lt;br/&gt;法则13. 配置ETags.&lt;br/&gt;&lt;br/&gt;我们的应用：&lt;br/&gt;&lt;br/&gt;更多情况下，我们倒不希望Ajax请求被缓存，此时为每个Ajax请求的url附加一个时间戳就可以了。&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970578/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970578/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>网络资讯</category><pubDate>Wed, 08 Apr 2009 10:24:47 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=345</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=345</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970578/5338990</fs:itemid></item><item><title>使用WebClient自动填写并提交ASP.NET页面表单</title><link>http://www.80600.net/article.asp?id=344</link><description>填写和提交以上表单的代码如下：&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 要提交表单的URI字符串。&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string uriString = &amp;#34;&lt;a href=&quot;http://www.xxx.com/Login.aspx&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://www.xxx.com/Login.aspx&lt;/a&gt;&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 要提交的字符串数据。&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string postString = &amp;#34;userName=user1&amp;amp;password=password1&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 初始化WebClient&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebClient webClient = new WebClient();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; webClient.Headers.Add(&amp;#34;Content-Type&amp;#34;, &amp;#34;application/x-www-form-urlencoded&amp;#34;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 将字符串转换成字节数组&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] postData = Encoding.ASCII.GetBytes(postString);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 上传数据，返回页面的字节数组&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] responseData = webClient.UploadData(uriString, &amp;#34;POST&amp;#34;, postData);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 返回的将字节数组转换成字符串(HTML)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string srcString = Encoding.UTF8.GetString(responseData);&lt;br/&gt;srcStrinig 就是提交表单后所返回页面的HTML。怎么样，很简单吧。&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;但是，以上代码可以提交ASP或JSP生成的表单，却不能提交ASP.NET表单。因为提交ASP.NET表单时，必须给“__VIEWSTATE”和“__EVENTVALIDATION”赋值。“__VIEWSTATE”和“__EVENTVALIDATION”的值可以通过在要提交的页面上按右键“查看源文件”中找到。如下：&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id=&amp;#34;__VIEWSTATE&amp;#34; value=&amp;#34;/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=&amp;#34;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id=&amp;#34;__EVENTVALIDATION&amp;#34; value=&amp;#34;/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc&amp;#34; &lt;br/&gt;通过“查看源文件”得到的“__VIEWSTATE”和“__EVENTVALIDATION”的值还不能直接提交给表单，还需要转换成URL编码的字符串。&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; viewState = System.Web.HttpUtility.UrlEncode(viewState);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;完整的代码如下：&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 提交按钮的文本&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string submitButton = &amp;#34;登录&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 页面的 VeiwState（可以通过IE打开页面，右键“查看源文件”取得）&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string viewState = &amp;#34;/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 页面的 EventValidation（可以通过IE打开页面，右键“查看源文件”取得）&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string eventValidation = &amp;#34;/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc&amp;#34;;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; submitButton = System.Web.HttpUtility.UrlEncode(submitButton);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; viewState = System.Web.HttpUtility.UrlEncode(viewState);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 要提交表单的URI字符串。&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string uriString = &amp;#34;&lt;a href=&quot;http://www.xxx.com/Login.aspx&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://www.xxx.com/Login.aspx&lt;/a&gt;&amp;#34;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 要提交的字符串数据。格式形如:user=uesr1&amp;amp;password=123&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string postString = &amp;#34;userName=1&amp;amp;password=1&amp;#34; + &amp;#34;&amp;amp;loginButton=&amp;#34; + submitButton + &amp;#34;&amp;amp;__VIEWSTATE=&amp;#34; + viewState + &amp;#34;&amp;amp;__EVENTVALIDATION=&amp;#34; + eventValidation;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 初始化WebClient&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebClient webClient = new WebClient();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; webClient.Headers.Add(&amp;#34;Content-Type&amp;#34;, &amp;#34;application/x-www-form-urlencoded&amp;#34;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 将字符串转换成字节数组&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] postData = Encoding.ASCII.GetBytes(postString);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 上传数据，返回页面的字节数组&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] responseData = webClient.UploadData(uriString, &amp;#34;POST&amp;#34;, postData);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 将返回的将字节数组转换成字符串(HTML);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ASP.NET 返回的页面一般是Unicode,如果是简体中文应使用 &lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Encoding.GetEncoding(&amp;#34;GB2312&amp;#34;).GetString(responseData)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string srcString = Encoding.UTF8.GetString(responseData);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (WebException we)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string msg = we.Message;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 几点说明：&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1)&amp;nbsp;&amp;nbsp;srcStrinig 是提交表单后所返回页面的HTML，可以使用正则表达式等来分析之，以获得你所需要的数据。&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2)&amp;nbsp;&amp;nbsp;“__VIEWSTATE”和“__EVENTVALIDATION”的值不是不是一成不变的。&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3)&amp;nbsp;&amp;nbsp;查看网页POST的数据还可以通过一些工具来查看，比如： 网页数据分析工具HttpWatch，网络嗅探器等。&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4)&amp;nbsp;&amp;nbsp;如果提交的表单有验证码，则不在本文讨论的范围内。&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970634/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970634/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>程序源码</category><pubDate>Fri, 06 Feb 2009 11:00:18 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=344</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=344</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970634/5338990</fs:itemid></item><item><title>Sql Server 2005 怎样建立分区表</title><link>http://www.80600.net/article.asp?id=343</link><description>对数据库进行评估后，需要对大表进行分区，由以下步骤可完成整个分区过程。&lt;br/&gt;&lt;div class=&quot;UBBPanel codePanel&quot;&gt;&lt;div class=&quot;UBBTitle&quot;&gt;&lt;img src=&quot;http://www.80600.net/images/code.gif&quot; style=&quot;margin:0px 2px -3px 0px&quot; alt=&quot;程序代码&quot;/&gt; 程序代码&lt;/div&gt;&lt;div class=&quot;UBBContent&quot;&gt;&lt;br/&gt;/*&lt;br/&gt;建立分区表的步骤：&lt;br/&gt;1.建立数据库；&lt;br/&gt;2.新增文件组；&lt;br/&gt;3.为文件组新增文件；&lt;br/&gt;4.建立分区函数；&lt;br/&gt;5.建立分区架构（Scheme）；&lt;br/&gt;6.新增表格（引用分区架构）。&lt;br/&gt;*/&lt;br/&gt;&lt;br/&gt;USE [MASTER]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP1:建立数据库&lt;br/&gt;IF EXISTS (Sel&amp;#101;ct * FROM [master].[dbo].[sysdatabases] Wh&amp;#101;re [name] = &amp;#39;TestDemo&amp;#39;)&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Dro&amp;#112; DATABASE [TestDemo]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Cr&amp;#101;ate DATABASE [TestDemo] ON PRIMARY &lt;br/&gt;(&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;NAME = N&amp;#39;TestDemo&amp;#39;, FILENAME = N&amp;#39;F:\TestDataBase\Data\TestDemo.mdf&amp;#39;, SIZE = 3072KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB&lt;br/&gt;)&lt;br/&gt;LOG ON &lt;br/&gt;(&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;NAME = N&amp;#39;TestDemo_log&amp;#39;, FILENAME = N&amp;#39;F:\TestDataBase\Data\TestDemo_log.ldf&amp;#39;, SIZE = 1024KB, MAXSIZE = 2048GB, FILEGROWTH = 10%&lt;br/&gt;)&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;USE [TestDemo]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP2:增加文件组&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG1&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG2&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG3&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG4&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP3:新增文件并与文件组关联&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILE (NAME = N&amp;#39;MASTERF1&amp;#39;, FILENAME = N&amp;#39;F:\TestDataBase\FileGroup\MASTERF1.NDF&amp;#39;) TO FILEGROUP MASTERFG1&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILE (NAME = N&amp;#39;MASTERF2&amp;#39;, FILENAME = N&amp;#39;F:\TestDataBase\FileGroup\MASTERF2.NDF&amp;#39;) TO FILEGROUP MASTERFG2&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILE (NAME = N&amp;#39;MASTERF3&amp;#39;, FILENAME = N&amp;#39;F:\TestDataBase\FileGroup\MASTERF3.NDF&amp;#39;) TO FILEGROUP MASTERFG3&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Alt&amp;#101;r DATABASE [TestDemo] ADD FILE (NAME = N&amp;#39;MASTERF4&amp;#39;, FILENAME = N&amp;#39;F:\TestDataBase\FileGroup\MASTERF4.NDF&amp;#39;) TO FILEGROUP MASTERFG4&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP4:建立分区函数&lt;br/&gt;IF EXISTS(Sel&amp;#101;ct * FROM [sys].[partition_functions] Wh&amp;#101;re [name] = N&amp;#39;MyPF1&amp;#39;)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dro&amp;#112; PARTITION FUNCTION MyPF1&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Cr&amp;#101;ate PARTITION FUNCTION MyPF1(BIGINT) &lt;br/&gt;AS RANGE RIGHT &lt;br/&gt;FOR VALUES (N&amp;#39;100000&amp;#39;, N&amp;#39;200000&amp;#39;, N&amp;#39;300000&amp;#39;)&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP5:建立分区架构&lt;br/&gt;If EXISTS(Sel&amp;#101;ct * FROM [sys].[partition_schemes] Wh&amp;#101;re [name] = N&amp;#39;MyPS1&amp;#39;)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dro&amp;#112; PARTITION SCHEME MyPS1&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Cr&amp;#101;ate PARTITION SCHEME MyPS1&lt;br/&gt;AS PARTITION MyPF1 &lt;br/&gt;TO (MASTERFG1, MASTERFG2, MASTERFG3, MASTERFG4)&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP6:根据分区架构新建表格&lt;br/&gt;IF EXISTS (Sel&amp;#101;ct * FROM [dbo].[sysobjects] Wh&amp;#101;re [ID] = OBJECT_ID(N&amp;#39;[dbo].[TestMaster]&amp;#39;) AND OBJECTPROPERTY([id], N&amp;#39;IsUserTable&amp;#39;) = 1)&lt;br/&gt;&amp;nbsp;&amp;nbsp; Dro&amp;#112; TABLE [dbo].[TestMaster]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Cr&amp;#101;ate TABLE [dbo].[TestMaster]&lt;br/&gt;(&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[AutoId] BIGINT IDENTITY(1,1) NOT NULL,&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[Text] VARCHAR (MAX) NULL CONSTRAINT [DF_TestMaster_Text] DEFAULT (N&amp;#39;有些程序员在撰写数据库应用程序时，常专注于 OOP 及各种 framework 的使用，却忽略了基本的 SQL 语句及其「性能 (performance) 优化」问题。版工曾听过台湾某半导体大厂的新进程序员，所组出来的一段 PL/SQL 跑了好几分钟还跑不完；想当然尔，即使他的 AJAX 及 ooxx 框架用得再漂亮，系统性能也会让使用者无法忍受。以下是版工整理出的一些数据库规划、SQL performance tuning 简单心得，让长年钻研 .NET、AJAX、一堆高深 ooxx framework，却无暇研究 SQL statement 的程序员，透过最短时间对本帖的阅读，能避免踩到一些 SQL 的性能地雷。(注：本帖的 SQL 语句皆经过测试可正常执行无误。有兴趣实验者，可直接拷贝后，粘贴至 SQL Server 中执行。)1、数据库设计与规划 • Primary Key 字段的长度尽量小，能用 small integer 就不要用 integer。例如员工数据表，若能用员工编号当主键，就不要用身分证号码。• 一般字段亦同。若该数据表要存放的数据不会超过 3 万笔，用 small integer 即可，不必用 integer。• 文字字段若长度固定，如：身分证号码，就不要用 varchar 或 nvarchar，应该用 char 或 nchar。• 文字字段若长度不固定，如：地址，则该用 varchar 或 nvarchar。除了可节省存储空间外，存取硬盘时也会较有效率。• 设计字段时，若其值可有可无，最好也给一个默认值，并设成「不允许 NULL」(一般字段默认为「允许 NULL」)。因为 SQL Server 在存放和查询有 NULL 的数据表时，会花费额外的运算动作 [2]。• 若一个数据表的字段过多，应垂直切割成两个以上的数据表，并可用同名的 Primary Key 一对多连结起来，如：Northwind 的 o&amp;#114;ders、Order Details 数据表。以避免在存取数据时，以「集簇索引 (clustered index)」扫描时会加载过多的数据，或修改数据时造成互相锁定或锁定过久。------------------------------2、适当地建立索引• 记得自行帮 Foreign Key 字段建立索引，即使是很少被 JOIN 的数据表亦然。• 替常被查询或排序的字段建立索引，如：常被当作 Wh&amp;#101;re 子句条件的字段。• 用来建立索引的字段，长度不宜过长，不要用超过 20 个 Byte 的字段，如：地址。• 不要替内容重复性高的字段建立索引，如：性别；反之，若重复性低的字段则适合建立索引，如：姓名。• 不要替使用率低的字段建立索引，以免浪费硬盘空间。• 不宜替过多字段建立索引，否则反而会影响到「Ins&amp;#101;rt、Up&amp;#100;ate、Del&amp;#101;te」的性能，尤其是以「OLTP (联机事务处理；在线交易)」为主的网站数据库。• 若数据表存放的数据很少，就不必刻意建立索引。否则可能数据库沿着存放索引的「树状结构」(Balanced Tree) 去搜寻索引中的数据，反而比扫描整个数据表还慢。• 若查询时符合条件的数据很多，则透过「非集簇索引 (non-clustered index)」搜寻的性能，反而 可能不如整个数据表逐笔扫描。• 建立「集簇索引」的字段选择至为重要，会影响到整个索引结构的性能。要用来建立「集簇索引」的字段，务必选择「整数」类型 (键值会较小)、唯一、不可为 NULL。&amp;#39;),&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[StartTime] DATETIME NULL CONSTRAINT [DF_TestMaster_StartTime] DEFAULT (GETDATE()),&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;CONSTRAINT [PK_TestMaster] PRIMARY KEY CLUSTERED &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;(&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[AutoId]&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;) ON MyPS1([AutoId])&lt;br/&gt;)&lt;br/&gt;ON MyPS1([AutoId]) -- 此处特别注意，不是 PRIMARY。&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;IF EXISTS (Sel&amp;#101;ct * FROM [dbo].[sysobjects] Wh&amp;#101;re [ID] = OBJECT_ID(N&amp;#39;[dbo].[TestMasterB]&amp;#39;) AND OBJECTPROPERTY([id], N&amp;#39;IsUserTable&amp;#39;) = 1)&lt;br/&gt;&amp;nbsp;&amp;nbsp; Dro&amp;#112; TABLE [dbo].[TestMasterB]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Cr&amp;#101;ate TABLE [dbo].[TestMasterB]&lt;br/&gt;(&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[AutoId] BIGINT IDENTITY(1,1) NOT NULL,&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[Text] NVARCHAR (4000) NULL CONSTRAINT [DF_TestMasterB_Text] DEFAULT (N&amp;#39;有些程序员在撰写数据库应用程序时，常专注于 OOP 及各种 framework 的使用，却忽略了基本的 SQL 语句及其「性能 (performance) 优化」问题。版工曾听过台湾某半导体大厂的新进程序员，所组出来的一段 PL/SQL 跑了好几分钟还跑不完；想当然尔，即使他的 AJAX 及 ooxx 框架用得再漂亮，系统性能也会让使用者无法忍受。以下是版工整理出的一些数据库规划、SQL performance tuning 简单心得，让长年钻研 .NET、AJAX、一堆高深 ooxx framework，却无暇研究 SQL statement 的程序员，透过最短时间对本帖的阅读，能避免踩到一些 SQL 的性能地雷。(注：本帖的 SQL 语句皆经过测试可正常执行无误。有兴趣实验者，可直接拷贝后，粘贴至 SQL Server 中执行。)1、数据库设计与规划 • Primary Key 字段的长度尽量小，能用 small integer 就不要用 integer。例如员工数据表，若能用员工编号当主键，就不要用身分证号码。• 一般字段亦同。若该数据表要存放的数据不会超过 3 万笔，用 small integer 即可，不必用 integer。• 文字字段若长度固定，如：身分证号码，就不要用 varchar 或 nvarchar，应该用 char 或 nchar。• 文字字段若长度不固定，如：地址，则该用 varchar 或 nvarchar。除了可节省存储空间外，存取硬盘时也会较有效率。• 设计字段时，若其值可有可无，最好也给一个默认值，并设成「不允许 NULL」(一般字段默认为「允许 NULL」)。因为 SQL Server 在存放和查询有 NULL 的数据表时，会花费额外的运算动作 [2]。• 若一个数据表的字段过多，应垂直切割成两个以上的数据表，并可用同名的 Primary Key 一对多连结起来，如：Northwind 的 o&amp;#114;ders、Order Details 数据表。以避免在存取数据时，以「集簇索引 (clustered index)」扫描时会加载过多的数据，或修改数据时造成互相锁定或锁定过久。------------------------------2、适当地建立索引• 记得自行帮 Foreign Key 字段建立索引，即使是很少被 JOIN 的数据表亦然。• 替常被查询或排序的字段建立索引，如：常被当作 Wh&amp;#101;re 子句条件的字段。• 用来建立索引的字段，长度不宜过长，不要用超过 20 个 Byte 的字段，如：地址。• 不要替内容重复性高的字段建立索引，如：性别；反之，若重复性低的字段则适合建立索引，如：姓名。• 不要替使用率低的字段建立索引，以免浪费硬盘空间。• 不宜替过多字段建立索引，否则反而会影响到「Ins&amp;#101;rt、Up&amp;#100;ate、Del&amp;#101;te」的性能，尤其是以「OLTP (联机事务处理；在线交易)」为主的网站数据库。• 若数据表存放的数据很少，就不必刻意建立索引。否则可能数据库沿着存放索引的「树状结构」(Balanced Tree) 去搜寻索引中的数据，反而比扫描整个数据表还慢。• 若查询时符合条件的数据很多，则透过「非集簇索引 (non-clustered index)」搜寻的性能，反而 可能不如整个数据表逐笔扫描。• 建立「集簇索引」的字段选择至为重要，会影响到整个索引结构的性能。要用来建立「集簇索引」的字段，务必选择「整数」类型 (键值会较小)、唯一、不可为 NULL。&amp;#39;),&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[StartTime] DATETIME NULL CONSTRAINT [DF_TestMasterB_StartTime] DEFAULT (GETDATE()),&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;CONSTRAINT [PK_TestMasterB] PRIMARY KEY CLUSTERED &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;(&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;[AutoId]&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;) ON [PRIMARY]&lt;br/&gt;)&lt;br/&gt;ON [PRIMARY]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP7:往数据库中新增数据,查看数据库属性，可看到 PRIMARY 大小不变，而 FILEGROUP 文件增大。&lt;br/&gt;DECLARE @Index INT&lt;br/&gt;&lt;br/&gt;SET @Index = 0&lt;br/&gt;&lt;br/&gt;WHILE @Index &amp;lt; 400000&lt;br/&gt;BEGIN&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SET @Index = @Index + 1&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Ins&amp;#101;rt INTO [dbo].[TestMaster] ([StartTime]) VALUES (GETDATE())&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Ins&amp;#101;rt INTO [dbo].[TestMasterb] ([StartTime]) VALUES (GETDATE())&lt;br/&gt;END&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP7:创建分页查询采用分区表的数据库表存储过程&lt;br/&gt;IF EXISTS (Sel&amp;#101;ct * FROM [dbo].[sysobjects] Wh&amp;#101;re [id] = OBJECT_ID(N&amp;#39;[dbo].[Test_GetTestMaster]&amp;#39;) AND OBJECTPROPERTY([id], N&amp;#39;IsProcedure&amp;#39;) = 1)&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Dro&amp;#112; PROCEDURE [dbo].[Test_GetTestMaster]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Cr&amp;#101;ate PROCEDURE [dbo].[Test_GetTestMaster]&lt;br/&gt;@PageSize INT,&lt;br/&gt;@PageIndex INT&lt;br/&gt;AS&lt;br/&gt;BEGIN&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SET NOCOUNT ON;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Sel&amp;#101;ct * FROM (&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Sel&amp;#101;ct ROW_NUMBER() OVER (ORDER BY [AutoId] DESC) AS [Row], [AutoId], [Text], [StartTime] &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;FROM [TestMaster]&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;) AS TEMP Wh&amp;#101;re [Row] &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;BETWEEN ((@PageIndex - 1) * @PageSize + 1) AND (@PageIndex * @PageSize)&lt;br/&gt;END&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP8:创建分页查询没有采用分区表的数据库表过程&lt;br/&gt;IF EXISTS (Sel&amp;#101;ct * FROM [dbo].[sysobjects] Wh&amp;#101;re [id] = OBJECT_ID(N&amp;#39;[dbo].[Test_GetTestMasterB]&amp;#39;) AND OBJECTPROPERTY([id], N&amp;#39;IsProcedure&amp;#39;) = 1)&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Dro&amp;#112; PROCEDURE [dbo].[Test_GetTestMasterB]&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;Cr&amp;#101;ate PROCEDURE [dbo].[Test_GetTestMasterB]&lt;br/&gt;@PageSize INT,&lt;br/&gt;@PageIndex INT&lt;br/&gt;AS&lt;br/&gt;BEGIN&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SET NOCOUNT ON;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Sel&amp;#101;ct * FROM (&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Sel&amp;#101;ct ROW_NUMBER() OVER (ORDER BY [AutoId] DESC) AS [Row], [AutoId], [Text], [StartTime] &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;FROM [TestMasterB]&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;) AS TEMP Wh&amp;#101;re [Row] &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;BETWEEN ((@PageIndex - 1) * @PageSize + 1) AND (@PageIndex * @PageSize)&lt;br/&gt;END&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP9:执行采用分区表的数据库表过程&lt;br/&gt;EXEC [dbo].[Test_GetTestMaster] 10, 30000&lt;br/&gt;GO&lt;br/&gt;&lt;br/&gt;-- STEP10:执行没有采用分区表的数据库表过程&lt;br/&gt;EXEC [dbo].[Test_GetTestMasterB] 10, 30000&lt;br/&gt;GO&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970662/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970662/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>程序源码</category><pubDate>Sat, 10 Jan 2009 12:07:08 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=343</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=343</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970662/5338990</fs:itemid></item><item><title>09年最值得期待电影《守望者》最新第三版预告片</title><link>http://www.80600.net/article.asp?id=342</link><description>&lt;div align=&quot;center&quot;&gt;&lt;div class=&quot;UBBPanel&quot;&gt;&lt;div class=&quot;UBBTitle&quot;&gt;&lt;img src=&quot;http://www.80600.net/images/flash.gif&quot; alt=&quot;&quot; style=&quot;margin:0px 2px -3px 0px&quot; border=&quot;0&quot;/&gt;Flash动画&lt;/div&gt;&lt;div class=&quot;UBBContent&quot;&gt;&lt;div id=&quot;temp53323&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;MediaShow('swf','temp53323','http://player.youku.com/player.php/sid/XNjQ1MTE0NDQ=/v.swf','480','400');&lt;/script&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970718/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970718/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>生活娱乐</category><pubDate>Thu, 08 Jan 2009 09:56:29 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=342</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=342</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970718/5338990</fs:itemid></item><item><title>C#制作鼠标可以穿透的窗体</title><link>http://www.80600.net/article.asp?id=341</link><description>最近看到有人问如何做一个“桌面天气秀”类似的软件，开始我以为做这个东西很复杂，因为觉得至少要传递Message给Desktop。但事实上，一试之后发现做这个程序竟然很简单。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;以下就把做的步骤列出来，供大家参考。&lt;br/&gt;&lt;br/&gt;首先，需要设置窗体样式，这里面要设置的有：&lt;br/&gt;&lt;ul&gt;&lt;li&gt;设置FormBorderStyle为None；&lt;br/&gt;&lt;/li&gt;&lt;li&gt;设置TopMost为false；&lt;br/&gt;&lt;/li&gt;&lt;li&gt;设置ShowInTaskbar为false；&lt;br/&gt;&lt;/li&gt;&lt;li&gt;为了能穿透桌面，要把BackColor设为White，在把TransparentKey设为White；&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt; &lt;br/&gt;这样，窗体的基本设置就完成了，为了显示要画的内容，则需要在窗体的Paint事件中去做，我这里所画的内容是显示当前月的所有天，相当于一个小日历。&lt;br/&gt;&lt;br/&gt;&lt;div class=&quot;UBBPanel codePanel&quot;&gt;&lt;div class=&quot;UBBTitle&quot;&gt;&lt;img src=&quot;http://www.80600.net/images/code.gif&quot; style=&quot;margin:0px 2px -3px 0px&quot; alt=&quot;程序代码&quot;/&gt; 程序代码&lt;/div&gt;&lt;div class=&quot;UBBContent&quot;&gt;&lt;br/&gt;private void Draw( Graphics g )&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const float REG_HEIGHT = 30f;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const float START_POS_X = 0f;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const float START_POS_Y = 0f;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int BLANK_SPACE_NUM = 5;&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Draw day of week signal&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RectangleF recRegion = new RectangleF( START_POS_X, START_POS_Y, &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(float)(this.Width), REG_HEIGHT );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const string FORMAT_STRING = &amp;#34;{0}{1}{2}{3}{4}{5}{6}&amp;#34;;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string strDraw = string.Format( FORMAT_STRING,&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#34;SUN&amp;#34;.PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39; ),&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#34;MON&amp;#34;.PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39; ),&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#34;TUE&amp;#34;.PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39; ),&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#34;WED&amp;#34;.PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39; ),&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#34;THU&amp;#34;.PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39; ),&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#34;FRI&amp;#34;.PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39; ),&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#34;SAT&amp;#34;.PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39; ) );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Font myFont = new Font( &amp;#34;宋体&amp;#34;, 11, FontStyle.Bold );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringFormat sfDraw = new StringFormat();&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sfDraw.Alignment = StringAlignment.Near;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sfDraw.LineAlignment = StringAlignment.Far;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Brush brDraw = new SolidBrush( Color.Wheat );&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.DrawString( strDraw, myFont, brDraw, recRegion, sfDraw );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime dtFirstDate = DateTime.Now.AddDays( 1 - DateTime.Now.Day );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int nStartIndex = (int)(dtFirstDate.DayOfWeek);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nStartIndex++;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TimeSpan tsDays = dtFirstDate.AddMonths( 1 ) - dtFirstDate;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Draw every day in this month&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDraw = &amp;#34;&amp;#34;;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i = 0;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( ; i &amp;lt; tsDays.Days; i++ )&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;switch( dtFirstDate.AddDays( i ).DayOfWeek )&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case DayOfWeek.Sunday:&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case DayOfWeek.Monday:&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case DayOfWeek.Tuesday:&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case DayOfWeek.Wednesday:&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case DayOfWeek.Thursday:&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case DayOfWeek.Friday:&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDraw += (i+1).ToString().PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39;);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case DayOfWeek.Saturday:&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDraw += (i+1).ToString().PadLeft( BLANK_SPACE_NUM, &amp;#39; &amp;#39;);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDraw = strDraw.PadLeft( BLANK_SPACE_NUM * 7, &amp;#39; &amp;#39; );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;recRegion = new RectangleF( START_POS_X, &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;START_POS_Y + REG_HEIGHT * ( 1 + ( (i+1) + nStartIndex - 7 ) / 7 ), &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(float)(this.Width), REG_HEIGHT );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.DrawString( strDraw, myFont, brDraw, recRegion, sfDraw );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDraw = &amp;#34;&amp;#34;;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( strDraw != &amp;#34;&amp;#34; )&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDraw = strDraw.PadRight( BLANK_SPACE_NUM * 7, &amp;#39; &amp;#39; );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;recRegion = new RectangleF( START_POS_X, &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;START_POS_Y + REG_HEIGHT * ( 1 + ( i + nStartIndex - 7 ) / 7 + 1 ), &lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(float)(this.Width), REG_HEIGHT );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.DrawString( strDraw, myFont, brDraw, recRegion, sfDraw );&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;private void frmSprite_Paint(object sender, System.Windows.Forms.PaintEventArgs e)&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphics g = e.Graphics;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Draw( g );&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;为了窗体能方便的退出，我加了一个NotifyIcon和ContextMenu来处理，具体如下。&lt;br/&gt;&lt;div class=&quot;UBBPanel codePanel&quot;&gt;&lt;div class=&quot;UBBTitle&quot;&gt;&lt;img src=&quot;http://www.80600.net/images/code.gif&quot; style=&quot;margin:0px 2px -3px 0px&quot; alt=&quot;程序代码&quot;/&gt; 程序代码&lt;/div&gt;&lt;div class=&quot;UBBContent&quot;&gt;&lt;br/&gt;private System.Windows.Forms.NotifyIcon ntfSprite;&lt;br/&gt;&lt;br/&gt;private System.Windows.Forms.ContextMenu mnuContext;&lt;br/&gt;&lt;br/&gt;private System.Windows.Forms.MenuItem mnuExit;&lt;br/&gt;&lt;br/&gt;private void mnuExit_Click(object sender, System.EventArgs e)&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Close();&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本来以为自己的窗体放在Desktop之前，会影响窗体下Desktop的某些操作，但事实，这一点根本不用担心，因为.Net框架已经替你做了，因此你不用再调用API来传递消息。&lt;br/&gt;&lt;br/&gt;如果想要所显示的窗体能够随意拖动，这可以参看我另外一篇文章：&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;http://blog.csdn.net/knight94/archive/2006/04/14/663089.aspx&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://blog.csdn.net/knight94/archive/2006/04/14/663089.aspx&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;以上的代码只是做了简单的测试，大家可以在我的基础上做扩展，例如调用Api来对当前进程作一些隐藏，设置窗体的起始位置，以及一些界面操作之类，放到启动菜单，这些都是可以完成的，我这里就不罗嗦了。&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970730/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970730/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>程序源码</category><pubDate>Tue, 06 Jan 2009 17:36:53 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=341</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=341</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970730/5338990</fs:itemid></item><item><title>SQL Server 本地数据库存储过程中执行远程数据库存储过程</title><link>http://www.80600.net/article.asp?id=340</link><description>&lt;div class=&quot;UBBPanel codePanel&quot;&gt;&lt;div class=&quot;UBBTitle&quot;&gt;&lt;img src=&quot;http://www.80600.net/images/code.gif&quot; style=&quot;margin:0px 2px -3px 0px&quot; alt=&quot;程序代码&quot;/&gt; 程序代码&lt;/div&gt;&lt;div class=&quot;UBBContent&quot;&gt;&lt;br/&gt;-- 参考：&lt;a target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/zh-cn/vstudio/ms190479(SQL.90).aspx&quot; rel=&quot;external&quot;&gt;http://msdn.microsoft.com/zh-cn/vstudio/ms190479(SQL.90).aspx&lt;/a&gt;&lt;br/&gt;&lt;strong&gt;EXECUTE sp_addlinkedserver &amp;#39;srv_lnk&amp;#39;, &amp;#39;&amp;#39;, &amp;#39;SQLOLEDB&amp;#39;, &amp;#39;192.168.100.10&amp;#39;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;-- 参考：&lt;a href=&quot;http://msdn.microsoft.com/zh-cn/msdntv/ms189811.aspx&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://msdn.microsoft.com/zh-cn/msdntv/ms189811.aspx&lt;/a&gt; &lt;br/&gt;&lt;strong&gt;EXECUTE sp_addlinkedsrvlogin &amp;#39;srv_lnk&amp;#39;, &amp;#39;false&amp;#39;, NULL, &amp;#39;RegSQL&amp;#39;, &amp;#39;123456&amp;#39;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;-- 参考：&lt;a href=&quot;http://msdn.microsoft.com/zh-cn/library/ms178532.aspx&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://msdn.microsoft.com/zh-cn/library/ms178532.aspx&lt;/a&gt;&lt;br/&gt;&lt;strong&gt;EXECUTE sp_serveroption &amp;#39;srv_lnk&amp;#39;, &amp;#39;rpc out&amp;#39;, &amp;#39;true&amp;#39;&lt;br/&gt;&lt;br/&gt;DECLARE&amp;#160;&amp;#160;&amp;#160;&amp;#160;@return_value int&lt;br/&gt;EXECUTE&amp;#160;&amp;#160;&amp;#160;&amp;#160;@return_value = [srv_lnk].[MailQueue].[dbo].[MQ_Up_RegisterEmail] @Email = &amp;#39;P4Blog@126.com&amp;#39;&lt;br/&gt;Sel&amp;#101;ct &amp;#39;Return Value&amp;#39; = @return_value&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;-- 参考：&lt;a href=&quot;http://msdn.microsoft.com/zh-cn/netframework/ms174310.aspx&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;http://msdn.microsoft.com/zh-cn/netframework/ms174310.aspx&lt;/a&gt;&lt;br/&gt;&lt;strong&gt;EXECUTE sp_dro&amp;#112;server &amp;#39;srv_lnk&amp;#39;, &amp;#39;dro&amp;#112;logins&amp;#39;&lt;/strong&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970769/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970769/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>程序源码</category><pubDate>Tue, 06 Jan 2009 14:13:40 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=340</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=340</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970769/5338990</fs:itemid></item><item><title>强人总结坐公交车遇到的囧人囧事</title><link>http://www.80600.net/article.asp?id=339</link><description>　　我还是提倡： 尊老爱幼和礼貌待人是美德(噢对了~还有~尊老爱幼和礼貌只要是个人就都应该知道的，在喊这口号的时候不一定非要在美德前面加上“中华民族的传统”这几个字)请看完的人不要用这事儿反映事。就是看一乐就行了。 &lt;br/&gt;　　本文全部根据上下班坐公交车的真实故事改编而成，重在教育，辅在娱乐。 &lt;br/&gt;&lt;br/&gt;　　请大家主动为老弱病残妇让座 &lt;br/&gt;&lt;br/&gt;　　1、大声打电话说话，夸夸其谈，吐沫腥子横飞，怕别人不知道他是“社会精英”。(我猜他肯定是精英，就是车坏了，迫不得以才来坐的公交吧？哦对了忘了说了，是自行车气门芯让人拔了。) &lt;br/&gt;&lt;br/&gt;　　2、电话响了，假装在看号码是谁，半天不接，实则是在炫耀自认为有个性的铃声。(号码看的这个仔细，心想，这谁呢~这是谁呢~) &lt;br/&gt;&lt;br/&gt;　　3、第2条的延伸：半天后总算接起电话，“喂，老婆……”，既然是老婆，号码肯定一看就该接了，非要假装看号码是谁，半天不接起来，炫耀铃声得以证实。 &lt;br/&gt;&lt;br/&gt;　　4、拿着一款可以放出七彩光芒灯的“山寨手机”，用外放播放同样“山寨”的歌曲。和全车人一同“分享”。(多数这样的人长的也比较山寨) &lt;br/&gt;&lt;br/&gt;　　5、坐你后座，扒在你靠背上的把手上，离你耳朵非常近的打电话打情骂俏。(设计对白：你要来看人家么？哎呀，你再过几天再来吧，人家，人家亲戚来了么…….说的声音很小，可是，可是，，还是听到了…..- -b.) &lt;br/&gt;&lt;br/&gt;　　6、带着耳机用手机放很大声的歌，自己在那陶醉哼唱，多数哼出来的声都跑调…….(仔细听听，词儿唱的也不对…..) &lt;br/&gt;&lt;br/&gt;　　7、用手机偷拍美女……..(真实见过,真想过去狠狠拍他肩膀，“哥们，蓝牙给我传一份… 咳咳~跑题了”)(偷拍是不对的，开个玩笑) &lt;br/&gt;&lt;br/&gt;　　8、打电话的司机……(见过边开边发短信的没？我见过，而且，而且~我还活着！万岁！) &lt;br/&gt;&lt;br/&gt;　　9、在自己旁边的空座位上放东西，其他人不吱声绝不主动拿起来的人。 &lt;br/&gt;&lt;br/&gt;　　10、很挤的车上，侧着身子翘二郎腿的人，非常占地方，使站着的乘客很不方便。(我这人极端，遇这样的人，我也和其他帖看到的那人一个做法，蹩着他的腿站，直到他不得劲收回去为止) &lt;br/&gt;&lt;br/&gt;　　11、座在最前面的横排座位，翘二郎腿，每走过一位乘客，基本都被他的鞋碰脏。(经常有人边拍裤子边骂这样的人) &lt;br/&gt;&lt;br/&gt;　　12、站没站相的人，晃来晃去，每次汽车刹车，和起步时，都跟啥也没扶似的靠在别人身上，我亲身经历过这样的人，我对付他的方法是，刹车时他再往我身上靠的时候，我突然向旁边一串，他差点没倒地上，他还说不了你什么，谁叫你自己不站好，非往别人身上靠。(那叫一个痛快解气) &lt;br/&gt;&lt;br/&gt;　　13、老人站旁边半天了，自己下一站就下车了，还想领个人情，这才“主动”给那老人让座。(设计对白：老头说：“我和你一样，也下车，但是还是很‘感谢你’”) &lt;br/&gt;&lt;br/&gt;　　14、车前面的横排座坐满了人，上来个老人，缓慢的向后走，横排坐共8个人，都盯着老人看，没动静，最后老人在其中一个人身边，这人起身让坐…..(你起身直接就走吧，不要再装热心了，你是被迫的，因为老人停你那了…..) &lt;br/&gt;&lt;br/&gt;　　15、车上空位比较多时，乱串座的人，我最多看过连续换了4次座位的人…..(也没看出他最后坐下的座比他第一个座好到哪去…平时挤的时候，只要有一个座，都抢的狠。) &lt;br/&gt;&lt;br/&gt;　　16、屁股特粘座，车都到站了才起身往后跑，一顿狂挤，边挤边喊下车的人。提前半站起身也不至于这样吧？？(结果很明显，经常下不去车，大喊“司机开门！”) &lt;br/&gt;&lt;br/&gt;　　17、奶奶领一很小的小孩儿，小女孩想站那里，奶奶非拽着小女孩往另一个地方领，小女孩说太挤了别去了，她奶奶说，你站这没人给你让坐，一边说一边推着小女孩往一个年轻人的座位走去……年轻人最终还是给小女孩让座了…..(有时候看着真希望那个人不给他让，让座是应该的，但是这老太太的心计有点恶心~) &lt;br/&gt;&lt;br/&gt;　　18、妈妈领一小男孩儿上车了，没座，站在某人座位旁边，小男孩马上就哭了，边哭边喊，没有座，我要坐座….旁边的人马上给他让了个座，男孩儿马上不哭了，眼泪都没有，露出诡异的笑容，(原来刚才是干打雷不下雨，我不知道他那笑容算不算诡异，但至少我看到他确实在微微的笑，虽然让座给这小孩儿是应该，但是他的这一举动我觉得特别讨人厌，如果我要是他家长，他这样绝对得教育他，惯坏了都~) &lt;br/&gt;&lt;br/&gt;　　19、让座后连句谢谢都不说就座那里的人。看都不看人一眼。看着就来气！(尊老爱幼是美德，和礼貌都是做人的基本，这人的礼貌哪去了) &lt;br/&gt;&lt;br/&gt;　　20、挺挤的车里，两个熟人旁有人下车空出了个座，这两人开始互相让，你推我挤的，面红耳赤的本来就挤的车，让他们俩这顿闹腾。(见过狠人，狠狠的问到：你俩坐不？不坐我坐！) &lt;br/&gt;&lt;br/&gt;　　21、车后面有个空座，上来个人，一瞅就是：我站着也无所谓的那种。但是~~~~~注意她的细节：她在用眼睛偷瞄车后面，脑袋不动，眼睛使劲瞄那种瞄法，看有没有空座，瞄到了，慢慢悠悠的走过去坐下，真恶心~！ &lt;br/&gt;&lt;br/&gt;　　22、两个有座位的人聊天中提到下一站就要下车，旁边一妇女听到了，开始往那边使劲挤，我正好站那里被她挤，不惯病！我一屁股就坐那了，气死她。(其实我不怎么想坐，夏天太热，站着比坐着凉快，况且没几站。但是这样的人特讨厌，抢之！) &lt;br/&gt;&lt;br/&gt;　　23、有个人收拾东西准备下车了，我当时站的位置按正常来说，正好他走我脚都不用动就可以坐那里。一妇女站我旁边，根本不可能有机会坐这，于是她问那个准备起身的乘客：“下车是不？”“是的”，“哦，那正好我坐那”，然后就用手够那个座的靠背把手，胳膊一横， &lt;br/&gt;　　(我草，当我空气啊，老子不爱坐座，但是就愿意和这样的人抢座，必须坐之~气死她。) &lt;br/&gt;&lt;br/&gt;　　24、车上无空位，上来一老人，瞅了瞅，使劲往一年轻人座位挤去，那年轻人不咋地，没给让座，他偷偷眼睛瞄了瞄那小伙，又瞅了瞅其他座位，又锁定了一个可能会让座的人，向他挤去….(先声明，让座是必须的，但是这老人的做法有些变味啦)。 &lt;br/&gt;&lt;br/&gt;　　25、现在流行隔着包刷卡，拿着包一晃，“嘀”~通过了，确实挺潇洒，可是你没那技术就乖乖把卡拿出来刷，晃了半天没反映，再掏卡，后面都等着你上车呢，这就有点招人烦了。 &lt;br/&gt;&lt;br/&gt;　　26、一对情侣，始发站上车，一个上车就往最后走，另一个说，去那干什么，就坐这得了呗，后面那个说，坐前面还得给老头让座，快过来。(我上班也是始发站，我也是往后坐，但是妹子，别吵吵出来好么 - -b 也不是啥好事儿呵呵) &lt;br/&gt;&lt;br/&gt;　　27、情侣标准姿势：女的坐在男的大腿上，胳膊搂着脖子。(我没有反对的意思，但是~~~~请女方把腿冲座里放，2个人占一个人的地方，大力提倡.. 请不要冲外坐，很碍事儿的) &lt;br/&gt;&lt;br/&gt;　　28、坐在窗边梳头的女生…..头发顺风飘到后座的我的脸上是很恶心的(美女梳头虽然看着挺妩媚，但是~相信我，头发丝刷！飘到你脸上的时候，你绝对会感觉很恶心，我亲身经历)&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970784/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970784/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>生活娱乐</category><pubDate>Tue, 06 Jan 2009 13:10:25 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=339</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=339</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970784/5338990</fs:itemid></item><item><title>国外街舞宝宝很强很可爱！</title><link>http://www.80600.net/article.asp?id=338</link><description>街舞，一项很好的运动，两岁的BABY跳的这么可爱。这是中西方教育方式的差异么？&lt;br/&gt;&lt;br/&gt;&lt;div align=&quot;center&quot;&gt;&lt;div class=&quot;UBBPanel&quot;&gt;&lt;div class=&quot;UBBTitle&quot;&gt;&lt;img src=&quot;http://www.80600.net/images/flash.gif&quot; alt=&quot;&quot; style=&quot;margin:0px 2px -3px 0px&quot; border=&quot;0&quot;/&gt;Flash动画&lt;/div&gt;&lt;div class=&quot;UBBContent&quot;&gt;&lt;div id=&quot;temp7646&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;MediaShow('swf','temp7646','http://player.youku.com/player.php/sid/XNjM2MjU3MDQ=/v.swf','480','400');&lt;/script&gt;&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/80600/330970806/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/80600/330970806/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>网络资讯</category><pubDate>Tue, 06 Jan 2009 12:48:53 +0800</pubDate><author>P4Blog@qq.com(MONO)</author><guid isPermaLink="false">http://www.80600.net/default.asp?id=338</guid><dc:creator>P4Blog@qq.com(MONO)</dc:creator><fs:srclink>http://www.80600.net/article.asp?id=338</fs:srclink><fs:srcfeed>http://www.80600.net/feed.asp</fs:srcfeed><fs:itemid>feedsky/80600/~7229717/330970806/5338990</fs:itemid></item></channel></rss>