譯完了提高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屬性.
新聞熱點
疑難解答