转载:ASP.Net性能优化(作者:刘鉴平)
2004-05-24 13:30 灵感之源 阅读(1311) 评论(0) 编辑 收藏 举报转载:ASP.Net性能优化(作者:刘鉴平)
ASP.Net <八段锦>
ASP.Net性能优化的
八个设计要点
1. 使用Page.IsPostBack
这一项大多数人都做到了.
If (!Page.IsPostBack)
{
dbAcess oWS=new dbAccess();
DataSet ds=oWS.GetNewsInfoDS();
}
2. 使用存储进程
优点:
o Stored Procedure 是在编译后运行
o 系统体系结构自然分层
o 安全性
微软在Best Practice中特别推崇,广泛被应用于大多数ASP.Net开发项目中.
3a. 使用HttpServerUtility.Transfer方法
服务器的Request方法已被广泛应用
但它不必要地进行了服务器到前后台的往返信息交換
应使用HttpServerUtility.Transfer方法,在同一系统内调用时,简洁,明快
例如, 过去您用Response.Redirect(“vip.aspx”);现在您不妨考虑使用Server.Transfer(“vip.aspx”);前者包含了服务器到前后台的往返信息交換, 后者则是直接跳过去了. 它们的微妙区别是:
Response.Redirect 将客户端重定向到新的 URL。指定新的 URL 并指定当前页的执行是否应终止。
Server.Transfer对于当前请求,终止当前页的执行,并使用指向一个新页的指定 URL 路径来开始执行此新页。
3b.限制验证控件的使用
验证控件Validate Control的确方便,但为性
能考虑,也尽量少用.有时可以在客户端用简
单的方法搞定.
总之是尽可能避免进行服务器到前后台的往
返信息交換.
4a. 只存储必要的View State
服务器控件将View State 存储设定为默认,
这有时是不必要的.
简单服务器控件还好, 如Label, Text Box
等,但一个DataGrid需要60K以上的数据传输.
4b. 不要依靠.Net的Exception
.Net的Exception Handling是一种昂贵的错误
处理机制,应尽可能用自制的错误处理机制,不要依靠.Net的Exception.
在.Net 进行Exception Handling 的时候, 服务器的资源被大量占用, 是一种非常不经济的办法.
5. 限制Session State的使用
ASP时代后, ASP.Net 的Session State引入
是一项巨大的进步,可是您应尽可能少用它.
甚至使Session State变成只读状态也是好的.例如,在用户登录后,以后其它页加入如下码:
<% Page EnableSessionState=“ReadOnly”%>
6.限制使用服务器控件
顾名思义,服务器控件是在服务器端运行的.它可以
o 动态掌控控件Property等
o 菅理View State
o 掌控服务器发生事件
然而,在可以使用HTML控件时尽量使用
HTML控件.
7. 对系统预编译
编制一个简单的程序,自动走遍ASP.Net系统
的每一页.
最不济也应手工访向系统的几个主页.
注: 据称新版.Net (Whidbey)解决了这一问题.
8. 关于 ASP.Net Caching
暂存Caching是一种性能优化的重要手段.但
使用时小心.设太多或太少Caching, 暂存的
定时等都对性能有莫大影响.
怎样找到一种平衡 ?
没有一定之规, 现在仍是一项研究课题.
总结
我们注意到, ASP.Net性能优化的八个设计要点实际上是一种还濮归真的过程应用.因为,最后落实在系统表现层的仍然是最最基本的HTML码.它应该是愈简单愈好.这也是用户可以体会到的唯一东西.
.Net的每一个特性或优点都有其相应的代价. 设计者掉以轻心的结果会使.Net这一先进技术转变成落后的,乃至低能的技术手段.
我的回复:
1、(略)
2、一些人认为:数据库仅仅是存放数据的地方,最好只使用表,其它特性,如试图、存储过程、触发器等等都不应该用,这样会在迁移数据库的时候特别容易;当然,我们在可见的将来,似乎都不考虑Linux+Oracle/MySQL,因此我们大量使用MS SQL特性,存储过程便是其中之一;
3、Server.Transfer的作用是把当前页的控制权移交给目标页面,同时把所有环境变量都传递过去,这在ASP3.0中便引入了,不过使用者不多。Server.Transfer的一个缺点是:环境变量的冲突/并发处理,在如果不注意,会造成调试难度加大;
4、的确,Validate Control最严重的缺点就是信息反复在B/S间流转,大大减低效率,看见页面中的大量ViewState占了大部分页面内容,特别不爽;可以的话,还是用客户端的JavaScript对输入内容进行校验;
5、参看4
6、微软的.NET每次抛出异常都会让系统停滞好一会儿,因为它需要进行大量的工作:追溯IL的错误行和内容,调用页面解析模板渲染错误等等,所以我们要:先保证代码质量,再认真处理用户输入,从代码到数据库任何一个环节都要处理好,这样Exception的出现才会理想地少;
7、一些时候,Session不可避免要进行读写,譬如页面间的变量传递。但Session也可以有轻量级别的Implementation。
(待续...)