国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

全面優化ADO

2024-07-21 02:08:35
字體:
來源:轉載
供稿:網友
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • 1 connection
    1.1 pooling
          在web application中,常常會出現同時有很多用戶同時訪問數據庫的情況,而且asp中的對象作用域是頁面級的,也就是
    說,每個頁面都要聯接和斷開數據庫,豈不是會很慢?而且每個到sql server數據庫的聯接會帶來37k的系統開銷,怎么
    辦?
           可能有人會想到用application和session來解決問題,但是,這是不可取的,如果用application,那么會出現多個用戶同時通過一個connection訪問數據庫的情況,雖然節省了建立連接的時間,但是訪問數據庫的速度就會變得非常慢。如果用session,出現的問題就是,session超時怎么辦?如果把session.timeout設得很大,那用戶離開之后,連接還會保留一段時間,也會帶來額外的開銷。
          其實根本不用考慮這個問題,通過ole db訪問數據庫,它會替你解決這個問題,ole db有一個resource pooling,它會代
    理你的連接請求,然后把別人剛用過的連接給你接著用。(具體機制不再闡述,其實我也沒搞太明白,嘻嘻)
    1.2 provider
    可能沒有多少人用過這個property吧,它的缺省值是msdasql,還有msidxs和adsdsoobject,但是在ado2.0(見vs98)和
    ado2.1(見sql7)里面提供了一些新的provider:
    msdaora (ole db provider for oracle)
    microsoft.jet.oledb.3.51(ole db provider for microsoft jet( for access))
    sqloledb(microsoft sql server ole db provider)
    如果你所用的數據庫是這些的話,用這些新的provider就可以不通過odbc而直接訪問數據庫,提高的效率就可想而知了。
    2 command
    2.1 commandtype
    缺省值是adcmdunknown,ado會逐個判斷你的commandtype,直到它認為合適為止,不建議采用。(在recordset.open和
    connection.execute的時候也可以用)
    adcmdtext是照原樣執行你的sql語句,但是如果你的sql language是以下幾種的話,通過使用別的commandtype就可以提高
    你的sql語句執行效率
    objcmd.execute "select * from table_name", adcmdtext可替換為objcmd.execute "table_name",adcmdtable
    objcmd.execute "exec proceuure_name",adcmdtext可替換為objcmd.execute "proceuure _name", adcmdstoredproc
    還有很重要的一點就是,如果你的sql語句沒有返回記錄集,如insert和update等,那么使用adexecutenorecords
    (ado2.0)可以減低系統開銷(可以加到adcmdtext 和adcmdstoredproc上,如adcmdstoredproc + adexecutenorecords)
    還有adcmdtabledirect和adcmdfile(ado2.0),我還不太清楚怎么用,adcmdfile可用于訪問一個xml文件。
    2.2 prepared
    如果你需要重復的執行類似的sql語句,那么你可以預編譯你的sql語句,提高的效率也很可觀
    objcmd.commandtext = "select spell from typer.wordspell where word = ? "
    objcmd.prepared = true
    objcmd.parameters.append objcmd.createparameter("word", advarchar, , 2)
    for i = 1 to len(strname)
    strchar = mid(strname, i, 1)
    objcmd("word") = strchar
    set objrs = objcmd.execute
    if objrs.eof then
    strnamesame = strnamesame & strchar
    else
    strnamesame = strnamesame & objrs("spell")
    end if
    next ''i = 1 to len(strname)
    3 recordset
    3.1 locktype
    缺省是adlockreadonly,如果你不用修改數據,就不要改成adlockoptimistic之類的,否則也會減低速度和增加開銷的
    adlockreadonly > adlockpessimistic > adlockoptimistic > adlockbatchoptimistic
    3.2 cursortype
    缺省是adopenforwardonly,如果你只用movenext method,也最好不要改,速度影響140%左右
    adopenforwardonly > adopendynamic > adopenkeyset > adopenstatic
    3.3 cursorlocation
    缺省是aduseserver,其實不好,它可以隨時反映數據庫服務器上的改動,但是系統開銷很大,而且需要維持和數據庫服務
    器的連接,但是在數據庫服務器和web server在一起的時候要快些。不過在adlockoptimistic的時候使我無法使用
    recordcount等property。
    使用用aduseclient的話,你可以對數據做再排序,篩選,shape等操作
    如果對數據的實時性沒有要求的話,盡量用aduseclient
    4 其它
    4.1 early bind
    用asp這一點就不用看了,如果用vb的話
    dim objconn as adodb.connection 比 set objconn = createobject("adodb.connection")要好
    4.2 ado 2.1里的shape真是好玩
    4.3 ado 2.1可以用objrs.fields.append來建立一個recordset
    4.4 把recordset的一列數據直接變成一個數組來操作速度快一些,但是系統開銷要大一些

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 辽宁省| 琼结县| 桐乡市| 驻马店市| 崇左市| 广州市| 海晏县| 淳安县| 龙山县| 普格县| 道孚县| 同心县| 兴义市| 泌阳县| 鄂托克前旗| 庐江县| 赤峰市| 师宗县| 浦东新区| 门头沟区| 鹤壁市| 仁布县| 秦皇岛市| 南靖县| 浦县| 景泰县| 桦甸市| 余干县| 新密市| 桑植县| 门源| 江西省| 共和县| 高淳县| 博罗县| 冀州市| 佳木斯市| 长沙县| 新乡市| 洪泽县| 阜南县|