ASP.NET数据层的优化方法
摘要:目前中国很多站点都采用了ASP.NET技术为用户提供各类服务。提高Web的响应速度、建立高性能的站点,很大一部分取决于ASP.NET应用程序的性能,因此对ASP.NET应用程序的性能优化至关重要。该文介绍了一些优化ASP.NET数据层的方法。
关键词:ASP.NET;数据层;Web应用程序
中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)14-3596-01
Methods of Optimizing Data Layer of ASP.NET
LI Qin, DOU Xiao-yu
(Shanxi Technical Collage of Finance and Economics, Xianyang 712000, China)
Abstract: Recently a lot of Websites use ASP.NET technology to provide consumers various services in China. To improve the Web response speed and build high performance Website, a large part of it depends on the performance of ASP.NET application, so it"s vital to optimize it. This article presents some methods to optimize data layer of ASP.NET.
Key words: ASP.NET; data layer; Web application
1 引言
用ASP.NET编写Web应用程序其轻松程度令人难以置信。它是如此的容易,以至于许多开发人员不用花费多少时间来构筑其应用便能获得非常好的性能。
因为数据库通常都用专门的硬件,而且ASP.NET使用代码和层之间的边界分离,使用Web服务或远程调用将降低20%以上的性能。因此数据库的处理成本仍然很高,因此最优化代码时,数据层的性能应该是首当其充要关注的地方。
当调整某个应用程序的性能时,你可以用它按先后次序:检查代码是否存取数据库?如果是,多长时间存取一次?注意相同的测试也可以被应用于使用Web服务或远程调用的代码。
如果在特定的代码流程中必须具有对数据库的请求以及要考察其它方面,如:想对字符串处理进行优先优化,那么暂且把它放一放,先按照上面定好的优先次序来做。除非你有异乎寻常的性能问题,否则你的时间应该用在尝试最优化与数据库的连接所花的时间,返回的数据量以及多长时间往返一次和数据库的通讯上。
有了这些概括信息,下面就看看能帮助改善ASP.NET应用程序数据层性能的方法。下面将从能获得最显著效果的改变开始。
2 具体优化方法
2.1 使用连接池
在实际应用开发中,特别是在Web应用系统中,直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器中,基本都提供了这项技术,无需自己编程,但是,深入了解这项技术是非常必要的。
建立Web应用程序与SQL Server之间的TCP连接是一项开销非常大的操作。微软的开发人员利用连接池技术已经有好长一段时间了,这个技术使他们能重用到数据库的连接。而不是每次请求都建立新的TCP连接,新连接仅在连接池中得不到连接时才建立。当连接被关闭时,它被返回到连接池中,在那里它仍然保持与数据库的连接,与完全断开TCP连接相反。
为了充分用好连接池,有几条规则必须了然于心。首先,打开连接,进行处理,然后关闭连接。宁愿每个请求的连接打开和关闭多次,也不要保持连接打开状态以及在不同的方法间将它传来传去。其次,使用相同的连接串(如果使用集成身份检查,那么也要用相同的线程身份)。如果不用相同的连接串,例如,根据登录用户来定制连接串,你将无法得到连接池所提供的相同的最优化值。当模拟大用户量情形时,如果你使用集成身份检查,那么你的连接池将效力大减。
不管什么时候,只要Web应用程序连接到运行在其它进程中的资源,比如某个数据库,你都应该针对连接到资源所耗时间,发送和接收数据所耗时间以及往返次数进行优化。为了实现较好的性能,应该首当其充优化应用程序中任何种类的忙碌进程。
2.2 使用ASP.NET Cache API
在编写代码之前要做的头等大事之一是最大限度地构建应用层并发掘ASP.NET的Cache特性。
如果的组件在ASP.NET 应用程序内运行,那么你只需要在应用程序工程中引用 System.Web.dll即可。当你需要访问Cache时,用HttpRuntime.Cache属性(相同的对象也可以通过Page.Cache和HttpContext.Cache访问)。
缓冲数据有几个准则。首先,如果数据能被使用多次,缓冲是个好的后选方案。其次,如果数据对给定请求或用户是一般的数据而非专用数据,那么最好是选择缓冲。如果数据用户或请求专用,如果需要保存期很长但可能不被经常使用,那么仍然要用缓冲。第三,常常被忽略的一个准则是有时缓冲太多的东西。一般来说,在x86机器上,为了降低内存不足错误的几率,运行某个进程不要超过800MB私有字节。因此,缓冲应该有个上限。
Cache有几个重要特性是必须要了解的。第一个是Cache实现了最近最少使用(least-recently-used)算法,允许ASP.NET强制Cache清除操作,即如果可用内存下降到低水平,则自动从Cache中删除不使用的项目。第二个是Cache支持依赖性和到期特性,它能强制包括时间,键值,文件失效。时间常常被使用,但ASP.NET 2.0引入了具有更强大的失效类型:数据库缓冲失效。也就是当数据库中的数据改变时,缓冲中的条目会自动删除。
2.3 使用预请求缓冲
由于Cache API被设计用来缓冲长期数据或直到某个条件被满足,预请求缓冲意旨用于请求期间的缓冲该数据。特定的代码流程被每次请求频繁访问但是数据只需要被拾取、应用、修改或更新一次,这样说太理论化,还是看一个具体的例子吧。
在架设网站论坛应用中,某个页面上使用的每个服务器控件需要个性化数据以确定使用那个皮肤和式样页,以及其它的个性化数据,其中有些数据可以被长时间缓冲,但有些数据,比如用于控件的皮肤在单个请求中只被拾取一次并在该请求执行期间被重用多次。
为了完成预请求缓冲,用ASP.NET HttpContext。HttpContext的实例是随每个请求创建的,并可以通过HttpContext.Current属性在那个请求执行期间的任何地方存取它。HttpContext 类具有一个特别的Items集合属性,被添加到该Items集合的对象和数据只是在该请求期间被缓存。就像可以使用Cache来保存频繁使用的数据一样,可以用HttpContext.Items来保存只在某个预请求中使用的数据。在此背景后的逻辑很简单:当数据不存在时被添加到 HttpContext.Items集合,以及在随后的并发查找中简单地返回HttpContext.Items中发现的数据。
3 结论
该文所描述的性能改进有两种类型:大型优化,如使用连接池和ASP.NET Cache API,以及进行微型优化,如使用预请求缓冲。这些微型优化有时很有意义,它对代码的小小改动便会引起很大的动静,产生成千次的调用。对于大型优化,可能会看到整体性能的大跳跃。而对微型优化,给定请求可能只是毫秒级的调整,但按每天的请求总数计算,其结果的改进可能是巨大的。
参考文献:
[1] 邓文渊,陈惠贞,陈俊荣.ASP与网页数据库设计[M].北京:中国铁道出版社,2004.
[2] 刘宏峰,陈江波.ASP网络开发技术大全[M].北京:人民邮电出版社,2001.
[3] Hasan, Jeffrey Tu, Kenneth.Performance Tuning and Optimization for Asp.Net Applications.[M].Addison Wesley Longman 2002.
[4] 宣小平,但正刚,张文毅.ASP数据库系统开发实例导航[M].北京:人民邮电出版社,2003.
版权声明:
1.十号范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《ASP.NET数据层的优化方法》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
本栏目阅读排行
栏目最新
- 1在农民收入调查工作动员培训会上讲话
- 22024年领导干部政治素质自评材料(完整)
- 3公司党委党建工作总结报告【完整版】
- 42024年主题教育党建调研开展情况总结
- 52024年度区妇联关于党建工作述职报告(完整)
- 6关于加强企业人才队伍建设调研与思考(完整文档)
- 72024县党员干部抓基层党建工作述职报告
- 8第二批主题教育研讨发言:时刻“以民为本”,听“实言实语”,办实事好事
- 92024关于党员干部法治信仰情况调研报告(2024年)
- 10局网络安全工作责任制落实自查报告(全文)
- 11XX国企分管领导关于党建设引领企业高质量发展研讨发言(范文推荐)
- 122024年第二批主题教育专题读书班研讨发言提纲(6)【完整版】