设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> ASP技术 >> 性能优化 >> 正文
最新信息
·ASP 中健壮的页结构的异常…
·Url ReWriting 示例
·改进 ASP 应用程序中的字符…
·关于"&"运算符效率低下的问…
·加速ASP程序的显示速度
·对你的ASP程序作负载测试
·ASP提速技巧五则
·用数据绑定实现高效率动态…
·不用 EOF 以加快记录循环
·对《在ASP中改善动态分页的…
资料搜索
热点信息
·加速ASP程序的显示速度
·ASP特殊字符过滤
·asp内存和速度优化
·微软建议的ASP性能优化28条…
·提高ADO性能的优秀经验
·asp性能测试第二部分(十一…
·改善ASP性能和外观的技巧集…
·ASP提速技巧五则
·如何增强ASP程序性能(4)
·Asp编码优化技巧8则
推荐信息
·改进 ASP 应用程序中的字符…
·提高ASP性能的最佳选择
·微软建议的ASP性能优化28条…
·asp内存和速度优化
·ASP特殊字符过滤
·提高ADO性能的优秀经验
·ASP实用技巧28则
·加速ASP程序的显示速度
·ASP中使用Session变量的优…
·优化你的ASP程序


Google
 
asp中ADO的优化
〖来源:不详 | 作者:未知 | 编辑:Cloudy | 浏览:人次〗

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


录入时间:2006-04-28 21:12:45 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号