首页 > 学院 > 开发设计 > 正文

提高Asp.Net应用程序性能的十大方法(译感)

2019-11-17 01:39:18
字体:
来源:转载
供稿:网友

提高asp.net应用程序性能的十大方法(译感)

译完了提高Asp.Net应用程序的十大方法这篇文章,仔细想其中提到的每一条,在这里结合我的项目来谈谈.第一条:返回多个结果集因为我的项目中所有对数据库的访问的sql语句都是通过调用存储过程实现的,所以基本上都是用一个存储过程完成返回多个结果集,来得到自己想要的数据.满足!!第二条:对数据进行分页我写了一个通用的分页存储过程,用于对显示的数据进行分页,参照了原来Dino Esposito 的分页思想写的,写成了一篇项目总结发表在CSDN上.经过几个项目后,发现分页的效率取决于用于分页的条件,一般情况下,用索引字段的来作条件分页的效率是最高的,所以在以后的项目中,要注意分页的效率.查了一下csdn中的分页存储过程,"风云"的那个分页存储过程比较通用,而且效率也高.决定以后用它的那个了.网址:http://community.csdn.net/Expert/topic/3587/3587201.xml?temp=.6331598CREATE PROCEDURE sp_page@tbvarchar(50), --表名@colvarchar(50), --按该列来进行分页@coltypeint,--@col列的类型,0-数字类型,1-字符类型,2-日期时间类型@orderbybit,--排序,0-顺序,1-倒序@collistvarchar(800),--要查询出的字段列表,*表示全部字段@pagesize int,--每页记录数@pageint,--指定页@condition varchar(800),--查询条件@pagesint OUTPUT --总页数AS/*功能描述:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数作者:pbsql版本:1.10最后修改:2004-11-29*/DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)IF @condition is null or rtrim(@condition)=''BEGIN--没有查询条件SET @where1=' WHERE 'SET @where2=' 'ENDELSEBEGIN--有查询条件SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件ENDSET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+') FROM'+@tb+@where2EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数IF @orderby=0SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+''+@collist+' FROM(SELECT">'+@tb+@where1+@col+'>(SELECTMAX('+@col+') '+' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+@col+' FROM'+@tb+@where2+'ORDERBY'+@col+') t) ORDER BY'+@colELSESET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+''+@collist+' FROM'+@tb+@where1+@col+'<(SELECTMIN('+@col+') '+' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+@col+' FROM'+@tb+@where2+'ORDERBY'+@col+'DESC) t) ORDER BY '+@col+' DESC'IF @page=1--第一页SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+''+@collist+'FROM'+@tb+@where2+'ORDER BY'+@col+CASE@orderby WHEN 0 THEN '' ELSE ' DESC' ENDEXEC(@sql)GO

第三条:连接池默认情况下,.NET是使用连接池来管理连接的.所以在项目上注意两点:一个是以构造一个类,专门用于返回连接字符串或连接对象,这样要以保证连接字符串是相同的,才能有效的利用连接池.另一个是用完连接后马上关闭边接.第四,五,七条:充分利用Asp.Net中的各种缓存技术(文章的第四,第五,第七个方法都是用了缓存)原来的项目中,用过一次页面输出缓存,但是没有成功,因为页面要提交,所以不能及时响应事件.就把它下掉了.开始以为是用缓存的问题.通过这篇文章,才知道是自己不知道怎么用.所以这段时间就在看有关怎么利用缓存的资料.应该好好的了解缓存的用法.这样,才能更有效的提高应用程序的效率.如果你也想了解缓存的技术,我找到了以下的几篇文章,它们都在Msdn中文网上:ASP.NET 缓存:方法和最佳实践:http://www.microsoft.com/china/MSDN/library/WebServices/ASP.NET/ASP.NETCaching-TechniquesandBestPractiCEs.mspx在 ASP.NET 中支持数据库缓存相关性:http://www.microsoft.com/china/msdn/library/webservices/asp.net/DbCacheDepASPNET.mspx使用缓存,节省资金:http://www.microsoft.com/china/msdn/library/webservices/asp.net/aspnetasp11022004.mspx为 ASP.NET 创建缓存配置对象:http://www.microsoft.com/china/MSDN/library/WebServices/ASP.NET/CreatingaCacheConfigurationObjectforASPNET.mspx还有一本微软的蓝皮书:Improving .NET application Performance and Scalability应该说这一本书是最全,最好的指南了.第六章有一节专门讲缓存及缓存应用指南的.正在看这一章.第六条:在后台处理这是我接触到的一个新的解决方案,原来asp.net中也可以作后台的定时触发功能.以后肯定能用上.上面列出的使用缓存,节省资金:http://www.microsoft.com/china/msdn/library/webservices/asp.net/aspnetasp11022004.mspx这篇文章就使用了这一种技术,很有参考价值.第八,九条:用IIS6的新功能原来一直没有注意IIS6,都是用IIS5,看来服务器应该升级了.第十条:有条件的使用ViewState一直都没注意ViewState,看来以后只要没有必须使用ViewState的时候就要把它关掉,特别是用到了DataGrid的页面.

总的看来,其中用Cache能更好的提高应用程序的性能,如果用到数据库,记得要充分利用连接池,高效率的分页;如果用的是windows 2003就不要忘了开它的Kernel Caching.最后也不要忘了关不用ViewState的页面或控件的EnableViewState属性.


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表