青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

思勤無(wú)邪

上學(xué)時(shí),因我年齡最小,個(gè)頭也最小,上課時(shí),就像大猩猩堆里的猴一般。如今,這猴偶爾也把最近的一些情況寫在這里。

   :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  132 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

公告

     吾日常三省吾身,曰思、曰勤、曰無(wú)邪。

積分與排名

  • 積分 - 187325
  • 排名 - 140

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

2. Ado.Net

    2.1 應(yīng)用Ado.net的一些思考原則
    1. 根據(jù)數(shù)據(jù)使用的方式來(lái)設(shè)計(jì)數(shù)據(jù)訪問(wèn)層
    2. 緩存數(shù)據(jù),避免不必要的操作
    3. 使用服務(wù)帳戶進(jìn)行連接
    4. 必要時(shí)申請(qǐng),盡早釋放
    5. 關(guān)閉可關(guān)閉的資源
    6. 減少往返
    7. 僅返回需要的數(shù)據(jù)
    8. 選擇適當(dāng)?shù)氖聞?wù)類型
    9. 使用存儲(chǔ)過(guò)程

    2.2 Connection
    數(shù)據(jù)庫(kù)連接是一種共享資源,并且打開和關(guān)閉的開銷較大。Ado.net默認(rèn)啟用了連接池機(jī)制,關(guān)閉連接不會(huì)真的關(guān)閉物理連接,而只是把連接放回到連接池中。因?yàn)槌刂泄蚕淼倪B接資源始終是有限的,如果在使用連接后不盡快關(guān)閉連接,那么就有可能導(dǎo)致申請(qǐng)連接的線程被阻塞住,影響整個(gè)系統(tǒng)的性能表現(xiàn)。
    2.2.1 在方法中打開和關(guān)閉連接
    這個(gè)原則有幾層含義:
    1. 主要目的是為了做到必要時(shí)申請(qǐng)和盡早釋放
    2. 不要在類的構(gòu)造函數(shù)中打開連接、在析構(gòu)函數(shù)中釋放連接。因?yàn)檫@將依賴于垃圾回收,而垃圾回收只受內(nèi)存影響,回收時(shí)機(jī)不定
    3. 不要在方法之間傳遞連接,這往往導(dǎo)致連接保持打開的時(shí)間過(guò)長(zhǎng)

    這里強(qiáng)調(diào)一下在方法之間傳遞連接的危害:曾經(jīng)在壓力測(cè)試中遇到過(guò)一個(gè)測(cè)試案例,當(dāng)增大用戶數(shù)的時(shí)候,這個(gè)案例要比別的案例早很久就用掉連接池中的所有連接。經(jīng)分析,就是因?yàn)锳方法把一個(gè)打開的連接傳遞到了B方法,而B方法又調(diào)用了一個(gè)自行打開和關(guān)閉連接的C方法。在A方法的整個(gè)運(yùn)行期間,它至少需要占用兩條連接才能夠成功工作,并且其中的一條連接占用時(shí)間還特別長(zhǎng),所以造成連接池資源緊張,影響了整個(gè)系統(tǒng)的可伸縮性!

    2.2.2 顯式關(guān)閉連接
    Connection對(duì)象本身在垃圾回收時(shí)可以被關(guān)閉,而依賴?yán)厥帐呛懿缓玫牟呗?。推薦使用using語(yǔ)句顯式關(guān)閉連接,如下例: 

using (SqlConnection conn = new SqlConnection(connString))
{
    conn.Open();
    
}
    // Dispose is automatically called on the conn variable here


    2.2.3 確保連接池啟用
   
Ado.net是為每個(gè)不同的連接串建立連接池,因此應(yīng)該確保連接串不會(huì)出現(xiàn)與具體用戶相關(guān)的信息。另外,要注意連接串是大小寫敏感的。
    2.2.4 不要緩存連接
   
例如,把連接緩存到Session或Application中。在啟用連接池的情況下,這種做法沒(méi)有任何意義。
    2.3 Command
    2.3.1 使用ExecuteScalar和ExecuteNonQuery
   
如果想返回像Count(*)、Sum(Price)或Avg(Quantity)那樣的單值,可以使用ExecuteScalar方法。ExecuteScalar返回第一行第一列的值,將結(jié)果集作為標(biāo)量值返回。因?yàn)閱为?dú)一步就能完成,所以ExecuteScalar不僅簡(jiǎn)化了代碼,還提高了性能。
    使用不返回行的SQL語(yǔ)句時(shí),例如修改數(shù)據(jù)(INSERT、UPDATE或DELETE)或僅返回輸出參數(shù)或返回值,請(qǐng)使用ExecuteNonQuery。這避免了用于創(chuàng)建空DataReader的任何不必要處理。
    2.3.2 使用Prepare
   
當(dāng)需要重復(fù)執(zhí)行同一SQL語(yǔ)句多次,可考慮使用Prepare方法提升效率。需要注意的是,如果只是執(zhí)行一次或兩次,則完全沒(méi)有必要。例如:

cmd.CommandText = "insert into Table1 ( Col1, Col2 ) values ( @val1, @val2 )";

cmd.Parameters.Add( 
"@val1", SqlDbType.Int, 4"Col1" );
cms.Parameters.Add( 
"@val2", SqlDbType.NChar, 50"Col2");

cmd.Parameters[
0].Value = 1;
cmd.Parameters[
1].Value = "XXX";
cmd.Prepare();
cmd.ExecuteNonQuery();

cmd.Parameters[
0].Value = 2;
cmd.Parameters[
1].Value = "YYY";
cmd.ExecuteNonQuery();

cmd.Parameters[
0].Value = 3;
cmd.Parameters[
1].Value = "ZZZ";
cmd.ExecuteNonQuery();


    2.3.3 使用綁定變量
    SQL語(yǔ)句需要先被編譯成執(zhí)行計(jì)劃,然后再執(zhí)行。如果使用綁定變量的方式,那么這個(gè)執(zhí)行計(jì)劃就可以被后續(xù)執(zhí)行的SQL語(yǔ)句所復(fù)用。而如果直接把參數(shù)合并到了SQL語(yǔ)句中,由于參數(shù)值千變?nèi)f化,執(zhí)行計(jì)劃就難以被復(fù)用了。例如上面Prepare一節(jié)給出的示例,如果把參數(shù)值直接寫到insert語(yǔ)句中,那么上面的四次調(diào)用將需要編譯四次執(zhí)行計(jì)劃。
    為避免這種情況造成性能損失,要求一律使用綁定變量方式。
    2.4 DataReader
   
DataReader最適合于訪問(wèn)只讀的單向數(shù)據(jù)集。與DataSet不同,數(shù)據(jù)集并不全部在內(nèi)存中,而是隨不斷發(fā)出的read請(qǐng)求,一旦發(fā)現(xiàn)數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)均被讀取,則從數(shù)據(jù)源傳輸一個(gè)數(shù)據(jù)緩沖區(qū)大小的數(shù)據(jù)塊過(guò)來(lái)。另外,DataReader保持連接,DataSet則與連接斷開。
    2.4.1 顯式關(guān)閉DataReader
   
與連接類似,也需要顯式關(guān)閉DataReader。另外,如果與DataReader關(guān)聯(lián)的Connection僅為DataReader服務(wù)的話,可考慮使用Command對(duì)象的ExecuteReader(CommandBehavior.CloseConnection)方式。這可以保證當(dāng)DataReader關(guān)閉時(shí),同時(shí)自動(dòng)關(guān)閉Connection。
    2.4.2 用索引號(hào)訪問(wèn)代替名稱索引號(hào)訪問(wèn)屬性
   
從Row中訪問(wèn)某列屬性,使用索引號(hào)的方式比使用名稱方式有細(xì)微提高。如果會(huì)被頻繁調(diào)用,例如在循環(huán)中,那么可考慮此類優(yōu)化。示例如下:

cmd.CommandText = "select Col1, Col2 from Table1" ;
SqlDataReader dr 
= cmd.ExecuteReader();

int col1 = dr.GetOrdinal("Col1");
int col2 = dr.GetOrdinal("Col2");

while (dr.Read())
{
    Console.WriteLine( dr[col1] 
+ "_" + dr[col2]);
}


    2.4.3 使用類型化方法訪問(wèn)屬性
   
從Row中訪問(wèn)某列屬性,用GetString、GetInt32這種顯式指明類型的方法,其效率較通用的GetValue方法有細(xì)微提高,因?yàn)椴恍枰鲱愋娃D(zhuǎn)換。
    2.4.4 使用多數(shù)據(jù)集
    部分場(chǎng)景可以考慮一次返回多數(shù)據(jù)集來(lái)降低網(wǎng)絡(luò)交互次數(shù),提升效率。示例如下:

cmd.CommandText = "StoredProcedureName";    // The stored procedure returns multiple result sets.
SqlDataReader dr = cmd.ExecuteReader();

while (dr.read())
// read first result set

dr.NextResult();

while (dr.read())
// 


    2.5 DataSet
    2.5.1 利用索引加快查找行的效率
    如果需要反復(fù)查找行,建議增加索引。有兩種方式:
    1. 設(shè)置DataTable的PrimaryKey
    適用于按PrimaryKey查找行的情況。注意此時(shí)應(yīng)調(diào)用DataTable.Rows.Find方法,一般慣用的Select方法不能利用索引。
    2. 使用DataView
    適用于按Non-PrimaryKey查找行的情況。可為DataTable創(chuàng)建一個(gè)DataView,并通過(guò)SortOrder參數(shù)指示建立索引。此后使用Find或FindRows查找行。

posted on 2007-04-02 21:59 思勤無(wú)邪 閱讀(1213) 評(píng)論(0)  編輯 收藏 引用 所屬分類: .NET
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品午夜视频| 小黄鸭精品密入口导航| 亚洲一二三区在线观看| aⅴ色国产欧美| 这里只有精品丝袜| 性欧美超级视频| 久久久国产亚洲精品| 蜜桃视频一区| 99视频精品| 欧美在线短视频| 免费在线看一区| 欧美日韩免费高清| 国产精品视频区| 亚洲成人自拍视频| 亚洲婷婷国产精品电影人久久| 欧美在线一二三四区| 欧美激情在线狂野欧美精品| 999亚洲国产精| 久久久精彩视频| 国产精品av免费在线观看| 国内伊人久久久久久网站视频| 亚洲欧洲中文日韩久久av乱码| 中文欧美字幕免费| 蜜桃av综合| 亚洲欧美日韩国产综合在线| 另类综合日韩欧美亚洲| 国产精品女主播一区二区三区| 亚洲精品一区中文| 久久精品国产第一区二区三区| 欧美高清在线一区二区| 亚洲午夜久久久| 蜜臀a∨国产成人精品| 国产日韩一区| 亚洲图片欧洲图片av| 欧美高清日韩| 久久久久久久激情视频| 国产欧美日韩另类视频免费观看| 日韩一区二区精品视频| 欧美成人高清| 欧美专区在线播放| 国产精品永久免费| 亚洲视频播放| 亚洲精品免费网站| 久久久久国产精品午夜一区| 国产精品久久久久91| 亚洲开发第一视频在线播放| 另类av导航| 久久激情五月婷婷| 国产亚洲一级高清| 久久九九热re6这里有精品| 亚洲中午字幕| 国产精品久久7| 亚洲天堂免费观看| 中文国产成人精品久久一| 欧美亚日韩国产aⅴ精品中极品| 日韩视频在线一区二区| 亚洲精品色婷婷福利天堂| 欧美日韩高清区| 亚洲免费在线观看视频| 亚洲欧美精品伊人久久| 国产在线日韩| 欧美福利电影网| 欧美国产第一页| 亚洲一区二区免费看| 亚洲欧美一级二级三级| 国产日韩综合| 欧美成人精品不卡视频在线观看 | 欧美高清一区| 亚洲精品网站在线播放gif| 亚洲国产精品99久久久久久久久| 免费看亚洲片| 亚洲美女视频在线观看| 亚洲人久久久| 国产精品久久一区二区三区| 久久成人国产精品| 久久久久久91香蕉国产| 亚洲人成毛片在线播放| 日韩视频一区二区在线观看 | 性欧美暴力猛交另类hd| 久久夜色精品国产欧美乱| 亚洲成人中文| 欧美经典一区二区三区| av不卡在线观看| 亚洲一区二区免费| 国模大胆一区二区三区| 亚洲国产精品va在线看黑人动漫 | 性久久久久久久久久久久| 国产主播一区二区三区| 亚洲电影在线看| 国产精品免费观看视频| 久久资源在线| 欧美三区美女| 另类欧美日韩国产在线| 欧美偷拍另类| 牛人盗摄一区二区三区视频| 欧美午夜片在线观看| 欧美xxxx在线观看| 国产精品免费一区豆花| 亚洲成色精品| 国产性天天综合网| 日韩视频二区| 亚洲国产一区在线| 性欧美精品高清| 亚洲视频在线观看视频| 裸体丰满少妇做受久久99精品 | 亚洲精品国产精品久久清纯直播 | 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲欧美在线看| 久久久久久综合网天天| 亚洲字幕一区二区| 欧美成人午夜77777| 久久久综合激的五月天| 国产精品免费视频观看| 亚洲美女精品久久| 亚洲国产精品综合| 欧美资源在线观看| 亚洲欧美日韩在线综合| 欧美另类69精品久久久久9999| 美女久久一区| 激情成人中文字幕| 欧美专区日韩专区| 久久久之久亚州精品露出| 国产欧美欧美| 亚洲一区www| 亚洲在线中文字幕| 欧美午夜激情小视频| 在线中文字幕不卡| 亚洲午夜免费福利视频| 欧美日韩亚洲成人| 一区二区免费在线观看| 亚洲欧美久久久久一区二区三区| 亚洲国产精品一区在线观看不卡| 欧美一区二区播放| 久久久久久日产精品| 国产一区二区三区免费在线观看| 亚洲欧美国产日韩天堂区| 午夜精品美女自拍福到在线| 欧美性片在线观看| 亚洲一区二区三区在线观看视频| 亚洲永久免费av| 国产美女精品| 久久精品国产免费观看| 久久综合九色综合欧美就去吻| 精品999日本| 欧美freesex8一10精品| 亚洲国产精品va在线观看黑人| 亚洲国产精品一区制服丝袜| 久久伊人免费视频| 欧美成人tv| 一二三四社区欧美黄| 国产精品超碰97尤物18| 亚洲私人影院| 久久人人精品| 亚洲精品视频在线| 国产精品三级视频| 久久久久综合网| 亚洲人精品午夜在线观看| 亚洲综合首页| 在线观看精品视频| 欧美视频在线观看免费网址| 午夜精品一区二区三区在线播放| 久久综合九色九九| 一区二区日韩欧美| 狠狠久久婷婷| 欧美日韩另类在线| 久久国产欧美精品| 亚洲伦理精品| 久久亚洲国产成人| 一区二区三区欧美在线观看| 国产亚洲精品激情久久| 欧美精品亚洲精品| 久久精品日产第一区二区三区| 亚洲啪啪91| 久久亚洲国产精品一区二区| 亚洲深夜福利网站| 亚洲国产精品va在线看黑人| 国产免费一区二区三区香蕉精| 久久美女性网| 亚洲女与黑人做爰| 亚洲免费观看高清完整版在线观看熊| 欧美在线一二三四区| 亚洲一二三区精品| 亚洲国产精品视频| 国产亚洲精品激情久久| 欧美日韩美女在线| 免费毛片一区二区三区久久久| 亚洲欧美日本在线| 这里只有精品视频| 亚洲美女av电影| 91久久久在线| 久久视频在线免费观看| 亚洲欧美日本国产有色| 亚洲免费观看视频| 亚洲成人在线视频网站| 国产美女在线精品免费观看| 国产精品播放| 欧美三级在线视频| 欧美另类人妖| 欧美国产精品中文字幕| 美国成人直播|