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