这里没有足够的空间有贴代码你可以从http://wwwrobhowardnet/中下载示例程序请下载Blackbelt TechEd 的示例程序
七 页面输出缓存和代理服务
Aspnet是你的界面层(或者说应该是)它包含页面用户控件服务器控件(HttpHandlers 和HttpModules)以及它们生成的内容如果你有一个Aspnet页面用来输出htmlxmlimgae或者是其它的数据对每一个请求你都用代码来生成相同的输出内容你就很有必要考虑用页面输出缓存了
你只要简单的把下面的这一行代码复制到你的页面中就可以实现了
<%@ PageOutputCache VaryByParams=none Duration= %>
你就可以有效的利用第一次请求里生成的页面输出缓存内容秒后重新生成一道页面内容这种技术其实也是运用一些低层的Cache API来实现用页面输出缓存有几个参数可以配置如上面所说的VaryByParams参数该参数表示什么时候触发重输出的条件也可以指定在Http Get或Http Post 请求模式下缓存输出例如当我们设置该参数为VaryByParams=Report的时候defaultaspx?Report=或者defaultaspx?Report=请求的输出都会被缓存起来参数的值可以是多个用分号隔开参数
许多人都没有意识到当用页面输出缓存的时候aspnet也会生成HTTP头集(HTTP Header)保存在下游的缓存服务器中这些信息可以用于Microsoft Internet安全性中以及加速服务器的响应速度当HTTP缓存的头被重置时请求的内容会被缓在网络资源中当客户端再次请求该内容时就不会再从源服务器上获得内容了而直接从缓存中获得内容
虽然用页面输出缓存不提高你的应用程序性能但是它能减少了从的服务器中加载已缓存页面内容的次数当然这仅限于缓存匿名用户可以访问的页面因为一旦页面被缓存后就不能再执行授权操作了
八 用IIS的Kernel Caching
如果你的应用程序没用运行在IIS(windows server )中那么你就失去了一些很好的提高应用程序性能的方法在第七个方法中我讲了用页面输出缓存提高应用程序的性能的方法在IIS中当一个请求到来到IIS后IIS会把它转给aspnet当应用了页面输出缓存时ASPNET中的HttpHandler会接到该请求HttpHandler从缓存中把内容取出来并返回
如果你用的是IIS它有一个非常好的功能就是Kernel Caching而且你不必修改aspnet程序中任何代码当aspnet接到一个已缓存的请求IIS的Kernel Cache会从缓存中得到它的一份拷贝当从网络中传来一个请求的时Kernel层会得到该请求如果该请求被缓存起来了就直接把缓存的数据返回这样就完工了这就意味着当你用IIS的Kernel Caching来缓存页面输出时你将获得不可置信的性能提升在开发VSNET 的
aspnet时有一点我是专门负aspnet性能的程序经理我的程序员用了这个方法我看了所有日报表数据发现用kernel model caching的结果总是最快的它们的一个共同的特征就是网络的请求和响应量很大但IIS只占用了%的CPU资源这是令人惊奇的有许多让你使用用IIS的理由但kernel cashing是最好的一个
九 用Gzip压缩数据
除非你的CPU占用率太高了才有必要用提升服务器性能的技巧用gzip压缩数据的方法可以减少你发送到服务端的数据量也可以提高页面的运行速度同时也减少了网络的流量怎么样更好的压缩数据取决于你要发送的数据还有就是客户端的浏览器支不支持(IIS把用gzip压缩后的数据发送到客户端客户端要支持gzip才能解析IE和Firefox都支持)这样你的服务器每秒能多响应一些请求同样你也减少了发送响应的数据量也就能多发送一些请求了
好消息gzip压缩已经被集成在IIS中了它比IIS中gzip更好不幸的是在IIS中启用gzip压缩你不能在IIS的属性对话中设置IIS开发团队把gzip压缩功能开发出来了但他们却忘了在管理员窗口中让管理员能很方便的启用它要启用gzip压缩你只能深入IIS的xml配置文件中修改它的配置
除了阅读本文以外只好再看看Brad Wilson写的<<IIS 压缩>>一文(http://wwwdotnetdevscom/articles/IIScompressionaspx)另外还有一篇介绍aspx压缩基础知识的文章Enable ASPX Compression in IIS但是要注意在IIS中动态压缩和kernel cashing是互斥的
十 服务器控件的ViewState
ViewState是aspnet中的一个特性它用于把生成页面要用的一状态值保存在一个隐藏域中当页面被回传到服务器时服务器要解析校验和应用ViewState中的数据以还原页面的控件树ViewState是一个非常有用的特性它能持久化客户端的状态而不用cookie或者服务器的内存大部分的服务器控件都是用ViewState来持久化那些在页面中与用户交互的元素的状态值例如用以保存用于分页的当前页的页码
用ViewState会带来一些负面的影响首先它加大的服务器的响应和请求的时间其次每次回传时都增加了序列化和反序列化数据的时间最后它还消耗了服务器更多的内存
许多的服务器控件很趋于使用ViewState如众所周知的DataGrid而有时候是没有必须使用的默认情况下是允许使用ViewState的如果你不想使用ViewState的话你可以在控件或页面级别把关闭它在控件中你只要把EnableViewState属性设为False就可以了你也可以在页面中设置使它的范围扩展到整个页面中
<%@ Page EnableViewState=false %>
如果页面无需回传或者每次请求页面只是呈现控件你就应该在页面级别中把ViewState关掉
总结
我只是提供我几个我认为有助于提高写高性能的aspnet应用程序的技巧本文提到的提高aspnet性能的技巧只是一个起步更多的信息请参考《Improving ASPNET Performance》一书只有通过自己的实践你才能找到对你的项目最有帮助的技巧然而在你的开发旅程中这些技巧可以起一些指导性的作用在软件开发中这些都不是绝对有用的因为各个项目都不一样
[] [] []