久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

ADO優(yōu)化

 Yann_YUan 2011-07-13
1 Connection
1.1 Pooling
在Web Application中,常常會(huì)出現(xiàn)同時(shí)有很多用戶同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)的情況,,而且ASP中的對(duì)象作用域是頁(yè)面級(jí)的,,
也就是說(shuō),每個(gè)頁(yè)面都要聯(lián)接和斷開數(shù)據(jù)庫(kù),,豈不是會(huì)很慢,?而且每個(gè)到SQL Server數(shù)據(jù)庫(kù)的聯(lián)接會(huì)帶來(lái)37k的系統(tǒng)開銷,,怎么辦?
可能有人會(huì)想到用Application和Session來(lái)解決問(wèn)題,,但是,,這是不可取的,如果用Application,,那么會(huì)出現(xiàn)多個(gè)用戶同
時(shí)通過(guò)一個(gè)Connection訪問(wèn)數(shù)據(jù)庫(kù)的情況,,雖然節(jié)省了建立連接的時(shí)間,但是訪問(wèn)數(shù)據(jù)庫(kù)的速度就會(huì)變得非常慢,。如果用
Session,,出現(xiàn)的問(wèn)題就是,Session超時(shí)怎么辦,?如果把Session.Timeout設(shè)得很大,,那用戶離開之后,連接還會(huì)保留一段
時(shí)間,,也會(huì)帶來(lái)額外的開銷,。
其實(shí)根本不用考慮這個(gè)問(wèn)題,通過(guò)OLE DB訪問(wèn)數(shù)據(jù)庫(kù),,它會(huì)替你解決這個(gè)問(wèn)題,,OLE DB有一個(gè)Resource Pooling,它會(huì)代
理你的連接請(qǐng)求,,然后把別人剛用過(guò)的連接給你接著用,。(具體機(jī)制不再闡述,其實(shí)我也沒(méi)搞太明白,,嘻嘻)
1.2 Provider
可能沒(méi)有多少人用過(guò)這個(gè)Property吧,,它的缺省值是MSDASQL,還有MSIDXS和ADSDSOObject,,但是在ADO2.0(見(jiàn)VS98)和
ADO2.1(見(jiàn)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)
如果你所用的數(shù)據(jù)庫(kù)是這些的話,,用這些新的Provider就可以不通過(guò)ODBC而直接訪問(wèn)數(shù)據(jù)庫(kù),提高的效率就可想而知了,。
2 Command
2.1 CommandType
缺省值是adCmdUnknown,,ADO會(huì)逐個(gè)判斷你的CommandType,直到它認(rèn)為合適為止,,不建議采用,。(在Recordset.Open和
Connection.Execute的時(shí)候也可以用)
adCmdText是照原樣執(zhí)行你的SQL語(yǔ)句,但是如果你的SQL Language是以下幾種的話,,通過(guò)使用別的CommandType就可以提高
你的SQL語(yǔ)句執(zhí)行效率
objCmd.Execute "Select * from table_name", adCmdText可替換為objCmd.Execute "table_name",adCmdTable
objCmd.Execute "Exec proceuure_name",adCmdText可替換為objCmd.Execute "proceuure _name", adCmdStoredProc
還有很重要的一點(diǎn)就是,,如果你的SQL語(yǔ)句沒(méi)有返回記錄集,如insert和update等,那么使用adExecuteNoRecords
(ADO2.0)可以減低系統(tǒng)開銷(可以加到adCmdText 和adCmdStoredProc上,,如adCmdStoredProc + adExecuteNoRecords)
還有adCmdTableDirect和adCmdFile(ADO2.0),,我還不太清楚怎么用,,adCmdFile可用于訪問(wèn)一個(gè)XML文件,。
2.2 Prepared
如果你需要重復(fù)的執(zhí)行類似的SQL語(yǔ)句,那么你可以預(yù)編譯你的SQL語(yǔ)句,,提高的效率也很可觀
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,,如果你不用修改數(shù)據(jù),就不要改成adLockOptimistic之類的,,否則也會(huì)減低速度和增加開銷的
adLockReadOnly > adLockPessimistic > adLockOptimistic > adLockBatchOptimistic
3.2 CursorType
缺省是adOpenForwardOnly,,如果你只用MoveNext Method,也最好不要改,,速度影響140%左右
adOpenForwardOnly > adOpenDynamic > adOpenKeyset > adOpenStatic
3.3 CursorLocation
缺省是adUseServer,,其實(shí)不好,它可以隨時(shí)反映數(shù)據(jù)庫(kù)服務(wù)器上的改動(dòng),,但是系統(tǒng)開銷很大,,而且需要維持和數(shù)據(jù)庫(kù)服務(wù)
器的連接,但是在數(shù)據(jù)庫(kù)服務(wù)器和Web Server在一起的時(shí)候要快些,。不過(guò)在adLockOptimistic的時(shí)候使我無(wú)法使用
RecordCount等Property,。
使用用adUseClient的話,你可以對(duì)數(shù)據(jù)做再排序,,篩選,,shape等操作
如果對(duì)數(shù)據(jù)的實(shí)時(shí)性沒(méi)有要求的話,盡量用adUseClient
4 其它
4.1 Early bind
用ASP這一點(diǎn)就不用看了,,如果用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來(lái)建立一個(gè)Recordset
4.4 把Recordset的一列數(shù)據(jù)直接變成一個(gè)數(shù)組來(lái)操作速度快一些,,但是系統(tǒng)開銷要大一些


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多