一、 SqlDataRead和Dataset的選擇
Sqldataread優(yōu)點:讀取數(shù)據(jù)非???。如果對返回的數(shù)據(jù)不需做大量處理的情況下,建議使用SqlDataReader,其性能要
比datset好很多。缺點:直到數(shù)據(jù)讀完才可close掉于數(shù)據(jù)庫的連接 。(SqlDataReader 讀數(shù)據(jù)是快速向前的。
SqlDataReader 類提供了一種讀取從 SQL Server 數(shù)據(jù)庫檢索的只進數(shù)據(jù)流的方法。它使用 SQL Server 的本機網(wǎng)絡數(shù)據(jù)傳
輸格式從數(shù)據(jù)庫連接直接讀取數(shù)據(jù)。DataReader需及時顯式的close??杉皶r的釋放對數(shù)據(jù)的連接。)
Dataset是把數(shù)據(jù)讀出,緩存在內存中。缺點:對內存的占用較高。如果對返回的數(shù)據(jù)需做大量的處理用Dataset比較好些
可以減少對數(shù)據(jù)庫的連接操作。優(yōu)點:只需連接一次就可close于數(shù)據(jù)庫的連接。
一般情況下,讀取大量數(shù)據(jù),對返回數(shù)據(jù)不做大量處理用SqlDataReader.對返回數(shù)據(jù)大量處理用datset比較合適.對
SqlDataReader和Dataset的選擇取決于程序功能的實現(xiàn)。
二、 ExecuteNonQuery和ExecuteScalar
對數(shù)據(jù)的更新不需要返回結果集,建議使用ExecuteNonQuery。由于不返回結果集可省掉網(wǎng)絡數(shù)據(jù)傳輸。它僅僅返回受
影響的行數(shù)。如果只需更新數(shù)據(jù)用ExecuteNonQuery性能的開銷比較小。
ExecuteScalar它只返回結果集中第一行的第一列。使用 ExecuteScalar 方法從數(shù)據(jù)庫中檢索單個值(例如id號)。與使
用 ExecuteReader 方法, 返回的數(shù)據(jù)執(zhí)行生成單個值所需的操作相比,此操作需要的代碼較少。
只需更新數(shù)據(jù)用ExecuteNonQuery.單個值的查詢使用ExecuteScalar 。
數(shù)據(jù)綁定的選擇
三、 數(shù)據(jù)的綁定DataBinder
一般的綁定方法<%# DataBinder.Eval(Container.DataItem, "字段名") %> 用DataBinder.eval 綁定不必關心數(shù)據(jù)來源
(Dataread或dataset)。不必關心數(shù)據(jù)的類型eval會把這個數(shù)據(jù)對象轉換為一個字符串。在底層綁定做了很多工作,使用了反
射性能。正因為使用方便了,但卻影響了數(shù)據(jù)性能。
來看下<%# DataBinder.Eval(Container.DataItem, "字段名") %>。當于dataset綁定時,DataItem其實式一個
DataRowView(如果綁定的是一個數(shù)據(jù)讀取器(dataread)它就是一個IdataRecord。)因此直接轉換成DataRowView的話
,將會給性能帶來很大提升。.
<%# ctype(Container.DataItem,DataRowView).Row("字段名") %>
對數(shù)據(jù)的綁定建議使用<%# ctype(Container.DataItem,DataRowView).Row("字段名") %>。數(shù)據(jù)量大的時候可提高幾百倍
的速度。使用時注意2方面:1.需在頁面添加<%@ Import namespace="System.Data"%>.2.注意字段名的大小寫(要特別注
意)。如果和查詢的不一致,在某些情況下會導致比<%# DataBinder.Eval(Container.DataItem, "字段名") %>還要慢。如果
想進一步提高速度,可采用<%# ctype(Container.DataItem,DataRowView).Row(0) %>的方法。不過其可讀性不高。
以上的是vb.net的寫法。在c#中:<@% ((DataRowView)Container.DataItem)["字段名"] %>
一、 應用Ado.net的一些思考原則
1. 根據(jù)數(shù)據(jù)使用的方式來設計數(shù)據(jù)訪問層
2. 緩存數(shù)據(jù),避免不必要的操作
3. 使用服務帳戶進行連接
4. 必要時申請,盡早釋放
5. 關閉可關閉的資源
6. 減少往返
7. 僅返回需要的數(shù)據(jù)
8. 選擇適當?shù)氖聞疹愋?br />
9. 使用存儲過程
二、 Connection
數(shù)據(jù)庫連接是一種共享資源,并且打開和關閉的開銷較大。Ado.net默認啟用了連接池機制,關閉連接不會真的關閉物理
連接,而只是把連接放回到連接池中。因為池中共享的連接資源始終是有限的,如果在使用連接后不盡快關閉連接,
那么就有可能導致申請連接的線程被阻塞住,影響整個系統(tǒng)的性能表現(xiàn)。
1、在方法中打開和關閉連接
這個原則有幾層含義:
1)主要目的是為了做到必要時申請和盡早釋放
2)不要在類的構造函數(shù)中打開連接、在析構函數(shù)中釋放連接。因為這將依賴于垃圾回收,而垃圾回收只受內存影響,
回收時機不定
3)不要在方法之間傳遞連接,這往往導致連接保持打開的時間過長
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點擊進入論壇