﻿<?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>博客园-Timone Mania</title><link>http://www.cnblogs.com/timone/</link><description>......NET......</description><language>zh-cn</language><lastBuildDate>Fri, 25 Jul 2008 22:35:05 GMT</lastBuildDate><pubDate>Fri, 25 Jul 2008 22:35:05 GMT</pubDate><ttl>60</ttl><item><title>如何最大限度提高.NET的性能 （续）</title><link>http://www.cnblogs.com/timone/archive/2006/11/18/564765.html</link><dc:creator>Timone</dc:creator><author>Timone</author><pubDate>Sat, 18 Nov 2006 12:39:00 GMT</pubDate><guid>http://www.cnblogs.com/timone/archive/2006/11/18/564765.html</guid><wfw:comment>http://www.cnblogs.com/timone/comments/564765.html</wfw:comment><comments>http://www.cnblogs.com/timone/archive/2006/11/18/564765.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/timone/comments/commentRss/564765.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/timone/services/trackbacks/564765.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp; 昨天发了一篇如何最大限度提高.NET性能的文章，评论的人不少，在这里非常感谢大家的评论，其中有些是指出文章的一些错误的，在这里感谢那些耐心写评论的老大们，小弟受益不少。<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; 昨天那篇主要是从写代码的一些细节上来提高速度，可能很些是难实际感受到性能的提高，但是作为一名程序员，不断提高自己代码的质量是不断追求的目标。<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; 其实随着硬件的发展，现在硬件的速度已经远远满足大多数人的的需要了，甚至有些人提出算法在现在软件开发中越来越不起作用了。记得以前看过麻省的数据结构视频，讲课的教授就问过一个问题（我记得不大清楚了,他的大概意思就是这样）：既然算法现在变得不重要了，为什么我们还要在这里研究呢？他给的答案就是“SPEED” ，我们追求速度就像赛车手追求速度一样！<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; 现在很多系统的开发都不会把速度放在第一位，其他如：稳定性，安全性，可重用性等往往最优先考虑的。现在设计模式，开发架构等主要都不是为了解决性能问题的。以上这些都是分析师，架构师考虑的，像我们一些小小的程序员就只能在代码的一些小地方，一个类，一个方法，一行代码上面来优化程序。我觉得多注意一些细节上的东西还是很好的。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 好了废话说了一大堆，现在来说说今天的主题，现在开发的很多网络系统性能开销主要是在数据的读取，传输上，更快的读取速度，更少的网络宽带占用是我们追求的目标。我就从这方面来谈谈如何提高.net的性能。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 1. 在数据层分页数据。可以通过ExcuteReader或者存储过程实现，方法很多，我就不多说了.(可以看看我写的&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp;&nbsp;&nbsp; 2. 尽量使用ExcuteReader来读取数据，ExcuteReader是效率最高的，在MicroSoft的PetShop 4.0全部数据访问都是用ExcuteReader来实现的，除非你对非连接有特殊要求（如 SmartClient智能客户端等）。</P>
<P>&nbsp;&nbsp;&nbsp; 3. 在非连接场合，用DataTable比用DataSet性能好，除非你要保存多个关系表。</P>
<P>&nbsp;&nbsp;&nbsp; 4. 使用DataTable的ImportRow方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有些场合需要把大量数据从一个DataTable复制到另一个DataTable,使用DataTable的ImportRow方法可以大大提高性能，数据量少时没多大分别，当数据量到一万行以上时就可以明显的提高，可以达到几倍。</P>
<P>&nbsp;&nbsp;&nbsp; 5. 把数据序列化为二进制文件方便传输。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 我们在处理DataSet,DataTable对象时可以序列化为XML文件，如果要在网络传输，XML文件会产生内存，网络带宽等资源问题。这时我们就可以把它序列化为二进制文件，这样生成的文件会减少很多，代码如下：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileStream fs = new fileStream(@"XMLData.bin",FileMode.Create);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BinaryFormatter bf = new BinaryFormatter();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bf.Serialize(fs,XMLData);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.colse();<BR>&nbsp;&nbsp;&nbsp;&nbsp; 这样生成的二进制文件称为XMLBinary,用WINHEX直接打开还可以看到一些XML标记在里面，如果数据量很大，这时加一行代码：<BR>&nbsp;&nbsp;&nbsp;&nbsp; XMLData.RemortingFormat = SerializationFormat.Binary;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 这时生成的文件称为TrueBinary文件，当处理大量（超过10000行）时生成的文件尺寸是XMLBinary的几分之一。序列化的时候会自动保存模式，这样解序过程很简单。我还不知道解序比直接读取XML性能会下降多少。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 6. 合理利用连接池。<BR>&nbsp;&nbsp;&nbsp; 连接池对性能的提高有很大的作用，默认是打开的。默认的Min Pool Size是0，一般设为一个比较小的值，如5。Max Pool Size默认是100，大多数WEB站点也够用，大型的适当增大。</P>
<P>&nbsp;&nbsp;&nbsp; 7. 使用SQLCLR开发<BR>&nbsp;&nbsp;&nbsp; 如果你是专注开SQL Server系列那你应该去研究一下SQLCLR，它的功能非常强大，在很多场合都可以提高性能（特别是大型企业级应用）。</P>
<P>&nbsp;&nbsp;&nbsp; 8. 通过静态类来访问APP.Config/Web.Config<BR>&nbsp;&nbsp;&nbsp; 我们有很多配置信息都是放在APP.Config/Web.Config，访问都会很频繁，这时建立一个静态类，所有的属性都通过静态类来访问，可以在一定程度提高性能，静态类只实例化一次，而APP.Config/Web.Config会产生很多IO操作。<BR>&nbsp;&nbsp;&nbsp; public static class MyWebConfig<BR>{<BR>&nbsp;<BR>&nbsp; static MyWebConfig()<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; ConnString = <BR>ConfigurationManager.ConnectionStrings["Connection"].<BR>ConnectionString;<BR>&nbsp;&nbsp; <BR>&nbsp; }<BR>&nbsp;<BR>&nbsp; public static string DbConnectionString<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; get<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ConnString;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }<BR>}</P>
<P>&nbsp;</P>
<P>好了 今天就写到这里， 有什么错误和不足的地方希望指出，欢迎提出更好的意见，共同进步。</P><img src ="http://www.cnblogs.com/timone/aggbug/564765.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41307/" target="_blank">[新闻]金山:360的免费杀毒只能是短期行为</a>]]></description></item><item><title>如何把任意输入框绑定到Enter键,按Enter提交或响应事件</title><link>http://www.cnblogs.com/timone/archive/2006/11/18/564309.html</link><dc:creator>Timone</dc:creator><author>Timone</author><pubDate>Sat, 18 Nov 2006 01:08:00 GMT</pubDate><guid>http://www.cnblogs.com/timone/archive/2006/11/18/564309.html</guid><wfw:comment>http://www.cnblogs.com/timone/comments/564309.html</wfw:comment><comments>http://www.cnblogs.com/timone/archive/2006/11/18/564309.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/timone/comments/commentRss/564309.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/timone/services/trackbacks/564309.html</trackback:ping><description><![CDATA[摘要: 登录或者搜索的时候我们都希望用户在输入完毕后按Enter键提交，本文提供了一个通用的方法，可以绑定任何输入框到Enter键，希望对大家有帮助&nbsp;&nbsp;<a href='http://www.cnblogs.com/timone/archive/2006/11/18/564309.html'>阅读全文</a><img src ="http://www.cnblogs.com/timone/aggbug/564309.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41307/" target="_blank">[新闻]金山:360的免费杀毒只能是短期行为</a>]]></description></item><item><title>如何在GridView中一次性批量更新多行数据</title><link>http://www.cnblogs.com/timone/archive/2006/11/17/564171.html</link><dc:creator>Timone</dc:creator><author>Timone</author><pubDate>Fri, 17 Nov 2006 15:19:00 GMT</pubDate><guid>http://www.cnblogs.com/timone/archive/2006/11/17/564171.html</guid><wfw:comment>http://www.cnblogs.com/timone/comments/564171.html</wfw:comment><comments>http://www.cnblogs.com/timone/archive/2006/11/17/564171.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/timone/comments/commentRss/564171.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/timone/services/trackbacks/564171.html</trackback:ping><description><![CDATA[摘要: Gridvew的功能非常强大，除了一些内置的外，我们还可以通过编程的方法个性化自己的GridView，本文介绍了如何用一个简单方法一次性更新多行的数据&nbsp;&nbsp;<a href='http://www.cnblogs.com/timone/archive/2006/11/17/564171.html'>阅读全文</a><img src ="http://www.cnblogs.com/timone/aggbug/564171.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41306/" target="_blank">[新闻]江民科技回应杀毒软件免费说 没病不能乱吃药</a>]]></description></item><item><title>如何最大限度提高.NET的性能</title><link>http://www.cnblogs.com/timone/archive/2006/11/17/563965.html</link><dc:creator>Timone</dc:creator><author>Timone</author><pubDate>Fri, 17 Nov 2006 10:59:00 GMT</pubDate><guid>http://www.cnblogs.com/timone/archive/2006/11/17/563965.html</guid><wfw:comment>http://www.cnblogs.com/timone/comments/563965.html</wfw:comment><comments>http://www.cnblogs.com/timone/archive/2006/11/17/563965.html#Feedback</comments><slash:comments>33</slash:comments><wfw:commentRss>http://www.cnblogs.com/timone/comments/commentRss/563965.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/timone/services/trackbacks/563965.html</trackback:ping><description><![CDATA[摘要:        本文介绍了了一些提高性能的小技巧，通过这些技巧可以或多或少的提高程序的运行速度，希望对大家有用。&nbsp;&nbsp;<a href='http://www.cnblogs.com/timone/archive/2006/11/17/563965.html'>阅读全文</a><img src ="http://www.cnblogs.com/timone/aggbug/563965.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41306/" target="_blank">[新闻]江民科技回应杀毒软件免费说 没病不能乱吃药</a>]]></description></item><item><title>在SQL Server 2005中用存储过程实现搜索功能</title><link>http://www.cnblogs.com/timone/archive/2006/11/16/563079.html</link><dc:creator>Timone</dc:creator><author>Timone</author><pubDate>Thu, 16 Nov 2006 15:20:00 GMT</pubDate><guid>http://www.cnblogs.com/timone/archive/2006/11/16/563079.html</guid><wfw:comment>http://www.cnblogs.com/timone/comments/563079.html</wfw:comment><comments>http://www.cnblogs.com/timone/archive/2006/11/16/563079.html#Feedback</comments><slash:comments>26</slash:comments><wfw:commentRss>http://www.cnblogs.com/timone/comments/commentRss/563079.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/timone/services/trackbacks/563079.html</trackback:ping><description><![CDATA[摘要:    本文介绍了如何在SQL SERVER 中用存储过程实现一个比较简单的搜索算法，这是一个比较常用的搜索算法希望能对大家有用&nbsp;&nbsp;<a href='http://www.cnblogs.com/timone/archive/2006/11/16/563079.html'>阅读全文</a><img src ="http://www.cnblogs.com/timone/aggbug/563079.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41305/" target="_blank">[新闻]WCG2008中国区总决赛打响</a>]]></description></item><item><title>如何在数据层分页以提高性能</title><link>http://www.cnblogs.com/timone/archive/2006/11/16/561950.html</link><dc:creator>Timone</dc:creator><author>Timone</author><pubDate>Thu, 16 Nov 2006 01:00:00 GMT</pubDate><guid>http://www.cnblogs.com/timone/archive/2006/11/16/561950.html</guid><wfw:comment>http://www.cnblogs.com/timone/comments/561950.html</wfw:comment><comments>http://www.cnblogs.com/timone/archive/2006/11/16/561950.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.cnblogs.com/timone/comments/commentRss/561950.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/timone/services/trackbacks/561950.html</trackback:ping><description><![CDATA[摘要:     在读取大量数据的时候我们可以通过DataReader对数据进行分页以提高性能，还有一个更好的方法就是在存储过程中对数据进行分页。&nbsp;&nbsp;<a href='http://www.cnblogs.com/timone/archive/2006/11/16/561950.html'>阅读全文</a><img src ="http://www.cnblogs.com/timone/aggbug/561950.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41305/" target="_blank">[新闻]WCG2008中国区总决赛打响</a>]]></description></item></channel></rss>