欢迎光临
我们一直在努力

asp中ADO的优化-ASP教程,性能优化

建站超值云服务器,限时71元/月

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)

全面优化ado

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的一列数据直接变成一个数组来操作速度快一些,但是系统开销要大一些

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » asp中ADO的优化-ASP教程,性能优化
分享到: 更多 (0)