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


    译完了提高Asp.Net应用程序的十大方法这篇文章,仔细想其中提到的每一条,在这里结合我的项目来谈谈.
    第一条:返回多个结果集
    因为我的项目中所有对数据库的访问的sql语句都是通过调用存储过程实现的,所以基本上都是用一个存储过程完成返回多个结果集,来得到自己想要的数据.满足!!
    第二条:对数据进行分页
    我写了一个通用的分页存储过程,用于对显示的数据进行分页,参照了原来Dino Esposito 的分页思想写的,写成了一篇项目总结发表在CSDN上.经过几个项目后,发现分页的效率取决于用于分页的条件,一般情况下,用索引字段的来作条件分页的效率是最高的,所以在以后的项目中,要注意分页的效率.查了一下csdn中的分页存储过程,"风云"的那个分页存储过程比较通用,而且效率也高.决定以后用它的那个了.
    网址:http://community.csdn.net/Expert/topic/3587/3587201.xml?temp=.6331598
    CREATE PROCEDURE sp_page
    @tb

    varchar(50), --表名
    @col

    varchar(50), --按该列来进行分页
    @coltype
    int,

    --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型
    @orderby
    bit,

    --排序,0-顺序,1-倒序
    @collist
    varchar(800),--要查询出的字段列表,*表示全部字段
    @pagesize int,

    --每页记录数
    @page
    int,

    --指定页
    @condition varchar(800),--查询条件
    @pages
    int 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=' '
    END
    ELSE
    BEGIN--有查询条件
    SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件
    SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件
    END
    SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+
    ') FROM '+@tb+@where2
    EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
    IF @orderby=0
    SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
    ' FROM (SELECT">'+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+
    ' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
    @col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
    ELSE
    SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
    ' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+
    ' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
    @col+' FROM '+@tb+@where2+'ORDER BY '+@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' END
    EXEC(@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属性.

  • 相关阅读:
    HDU 1078 FatMouse and Cheese(DP)
    HDU 1160 FatMouse's Speed(DP)
    作业DAY019
    作业DAY018
    作业DAY017
    作业DAY016
    作业DAY015
    作业DAY014
    作业DAY013
    作业DAY012
  • 原文地址:https://www.cnblogs.com/ranran/p/3863540.html
Copyright © 2020-2023  润新知