ASP.NET程式的優化建議資料庫操作

iDotNetSpace發表於2008-09-12

1、用完馬上關閉資料庫連線

  訪問資料庫資源需要建立連線、開啟連線和關閉連線幾個操作。這些過程需要多次與資料庫交換資訊以通過身份驗證,比較耗費伺服器資

源。ASP.NET中提供了連線池(Connection Pool)改善開啟和關閉資料庫對效能的影響。系統將使用者的資料庫連線放在連線池中,需要時取出,關閉時收回連線,等待下一次的連線請求。


連線池的大小是有限的,如果在連線池達到最大限度後仍要求建立連線,必然大大影響效能。因此,在建立資料庫連線後只有在真正需要操作時才開啟連線,使用完畢後馬上關閉,從而儘量減少資料庫連線開啟的時間,避免出現超出連線限制的情況。

用(推薦)
using(SqlConnection Conn=new SqlConnection(connstr))
{}//不必顯示關閉


try{conn.Open();}
catch{}
finally{conn.Close();}


2、儘量使用儲存過程,並優化查詢語句

  儲存過程是儲存在伺服器上的一組預編譯的SQL語句,類似於DOS系統中的批處理檔案。儲存過程具有對資料庫立即訪問的功能,資訊處理極為迅速。使用儲存過程可以避免對命令的多次編譯,在執行一次後其執行規劃就駐留在快取記憶體中,以後需要時只需直接呼叫快取中的二進位制程式碼即可。在 .NET Framework 提供的所有資料訪問方法中,基於 SQL Server 的資料訪問是生成高效能、可縮放 Web 應用程式的推薦選擇。使用託管 SQL Server 提供程式時,可通過使用編譯的儲存過程而不是特殊查詢獲得額外的效能提高。

  另外,儲存過程在伺服器端執行,獨立於ASP.NET程式,便於修改,最重要的是它可以減少資料庫操作語句在網路中的傳輸。

  優化查詢語句

  ASP.NET中ADO連線消耗的資源相當大,SQL語句執行的時間越長,佔用系統資源的時間也越長。因此,儘量使用優化過的SQL語句以減少執行時間。比如,不在查詢語句中包含子查詢語句,儘量只返回有用的資料、欄位,充分利用索引等。


3、只讀資料訪問用SqlDataReader,不要使用DataSet

  SqlDataReader 類提供了一種讀取從 SQL Server 資料庫檢索的只進資料流的方法。如果當建立 ASP.NET 應用程式時出現允許您使用它的情況,則 SqlDataReader 類提供比 DataSet 類更高的效能。情況之所以這樣,是因為 SqlDataReader 使用 SQL Server 的本機網路資料傳輸格式從資料庫連線直接讀取資料。另外,SqlDataReader 類實現 IEnumerable 介面,該介面也允許您將資料繫結到伺服器控制元件。DataSet作為一個功能強大的、支援離線的資料庫,其對效能的開銷也相對較大。

Sqldataread優點:讀取資料非常快。如果對返回的資料不需做大量處理的情況下,建議使用SqlDataReader,其效能要比datset好很多。缺點:直到資料讀完才可close掉於資料庫的連線。


Dataset是把資料讀出,快取在記憶體中。缺點:對記憶體的佔用較高。如果對返回的資料需做大量的處理用Dataset比較好些可以減少對資料庫的連線操作。優點:只需連線一次就可close於資料庫的連線。

一般情況下,讀取大量資料,對返回資料不做大量處理用SqlDataReader.對返回資料大量處理用datset比較合適.對SqlDataReader和Dataset的選擇取決於程式功能的實現。


4、資料的繫結DataBinder

一般的繫結方法

用DataBinder.eval 繫結不必關心資料來源(read或dataset)。不必關心資料的型別eval會把這個資料物件轉換為一個字串。在底層繫結做了很多工作,使用了反射效能。正因為使用方便了,但卻影響了資料效能。

來看下。當於dataset繫結時,DataItem其實式一個DataRowView(如果繫結的是一個資料讀取器(dataread)它就是一個 IdataRecord。)因此直接轉換成DataRowView的話,將會給效能帶來很大提升。

對資料的繫結建議使用。使用時注意兩個方面:
1.需在頁面新增.
2.注意欄位名的大小寫(要特別注意)。如果和查詢的不一致,在某些情況下會導致比還要慢。如果想進一步提高速度,可採用的方法。不過其可讀性不高。

以上的是vb.net的寫法。在c#中:

5、返回多個結果集

無論SqlDataReader還是datset,返回多個結果集,然後用rd.NextResult()或ds.Tables[i]來分別處理資料,減少重複連線資料庫的次數。同時儘量用比較高效的SQL代替後續複雜的DataSet二次加工。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-446847/,如需轉載,請註明出處,否則將追究法律責任。

相關文章