|
|
|
|
提高ASP.Net应用程序性能的十大方法 |
作者:编辑整理 来源:帝网科技 日期:2008年09月26日 点击数: |
本文讨论: 提高asp.net应用程序性能的常说的神话 有用的提高asp.net应用程序性能的技巧 Asp.net应用程序操作数据库的建议 Asp.net中的缓存与后台处理进程 现在写一个asp.net的web应用程序变得非常的简单,许多的程序员都不愿花时间去构建一个性能良好的应用程序。本文将要讨论提高web应用程序性能的十大方法。我将不限于只讨论asp.net应用程序的内容,因为它们只是web应用程序的一个子集。本文也不能提供一个完整提高web应用程序性能的指南,因为这需要一本书的篇幅。本文只提供一个提高web应用程序性能的良好的开端。(剩下的只有我们自己慢慢研究了)。 在工作这外,我经常去攀岩,在每次攀岩之前,我都会重温一下攀岩线路图及看一下前面的成功的攀岩者的建议。因为我们需要它们的成功经验。同样的,当你需要修改某个有性能问题的程序或者是要开发一个高性能的站点时,你也需要学习怎么样写一个高性能的web应用程序。 我个人的经验主要来源于在微软的asp.net组担任程序经理,运行和管理http://www.rob-howard.net/中下载示例程序,请下载BlackbeltTechEd2004的示例程序。 七、页面输出缓存和代理服务 Asp.net是你的界面层(或者说应该是),它包含页面,用户控件,服务器控件(HttpHandlers和HttpModules)以及它们生成的内容。如果你有一个Asp.net页面用来输出html,xml,imgae或者是其它的数据,对每一个请求你都用代码来生成相同的输出内容,你就很有必要考虑用页面输出缓存了。 你只要简单的把下面的这一行代码复制到你的页面中就可以实现了: <%@PageOutputCacheVaryByParams=”none”Duration=”60”%> 你就可以有效的利用第一次请求里生成的页面输出缓存内容,60秒后重新生成一道页面内容。这种技术其实也是运用一些低层的CacheAPI来实现。用页面输出缓存有几个参数可以配置,如上面所说的VaryByParams参数,该参数表示什么时候触发重输出的条件,也可以指定在HttpGet或HttpPost请求模式下缓存输出。例如当我们设置该参数为VaryByParams=”Report”的时候,default.aspx?Report=1或者default.aspx?Report=2请求的输出都会被缓存起来。参数的值可以是多个用分号隔开参数。 许多人都没有意识到当用页面输出缓存的时候,asp.net也会生成HTTP头集(HTTPHeader)保存在下游的缓存服务器中,这些信息可以用于MicrosoftInternet安全性中以及加速服务器的响应速度。当HTTP缓存的头被重置时,请求的内容会被缓在网络资源中,当客户端再次请求该内容时,就不会再从源服务器上获得内容了,而直接从缓存中获得内容。 虽然用页面输出缓存不提高你的应用程序性能,但是它能减少了从的服务器中加载已缓存页面内容的次数。当然,这仅限于缓存匿名用户可以访问的页面。因为一旦页面被缓存后,就不能再执行授权操作了。 八、用IIS6.0的KernelCaching 如果你的应用程序没用运行在IIS6.0(windowsserver2003)中,那么你就失去了一些很好的提高应用程序性能的方法。在第七个方法中,我讲了用页面输出缓存提高应用程序的性能的方法。在IIS5.0中,当一个请求到来到IIS后,IIS会把它转给asp.net,当应用了页面输出缓存时,ASP.NET中的HttpHandler会接到该请求,HttpHandler从缓存中把内容取出来并返回。 如果你用的是IIS6.0,它有一个非常好的功能就是KernelCaching,而且你不必修改asp.net程序中任何代码。当asp.net接到一个已缓存的请求,IIS的KernelCache会从缓存中得到它的一份拷贝。当从网络中传来一个请求的时,Kernel层会得到该请求,如果该请求被缓存起来了,就直接把缓存的数据返回,这样就完工了。这就意味着当你用IIS的KernelCaching来缓存页面输出时,你将获得不可置信的性能提升。在开发VS.NET2005的asp.net时有一点,我是专门负asp.net性能的程序经理,我的程序员用了这个方法,我看了所有日报表数据,发现用kernelmodelcaching的结果总是最快的。它们的一个共同的特征就是网络的请求和响应量很大,但IIS只占用了5%的CPU资源。这是令人惊奇的。有许多让你使用用IIS6.0的理由,但kernelcashing是最好的一个。 九、用Gzip压缩数据 除非你的CPU占用率太高了,才有必要用提升服务器性能的技巧。用gzip压缩数据的方法可以减少你发送到服务端的数据量,也可以提高页面的运行速度,同时也减少了网络的流量。怎么样更好的压缩数据取决于你要发送的数据,还有就是客户端的浏览器支不支持(IIS把用gzip压缩后的数据发送到客户端,客户端要支持gzip才能解析,IE6.0和Firefox都支持)。这样你的服务器每秒能多响应一些请求,同样,你也减少了发送响应的数据量,也就能多发送一些请求了。 好消息,gzip压缩已经被集成在IIS6.0中了,它比IIS5.0中gzip更好。不幸的是,在IIS6.0中启用gzip压缩,你不能在IIS6.0的属性对话中设置。IIS开发团队把gzip压缩功能开发出来了,但他们却忘了在管理员窗口中让管理员能很方便的启用它。要启用gzip压缩,你只能深入IIS6.0的xml配置文件中修改它的配置。 除了阅读本文以外,只好再看看BradWilson写的<>一文(
|
|
|
|
|
|
|