asp中ADO的优化

转载 2006年05月17日 09:18:00

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

相关文章推荐

Asp.Net Ajax+WCF Service+ADO.NET Entity Framework实现数据列表,数据筛选,分页,排序,删除

====================================================== 注:本文源代码点此下载 =============================...

ASP中通过ADO访问ACCESS和SQL SERVER

最近参与到了一个ASP项目中,

JQuery Pagination AJax 分页实例 For ASP.NET(JQuery+ashx+ADO.NET 实体数据模型)

刚写了一段Jquery Pagination AJax 分页实例 For ASP,其实分页的服务端用asp.net也很简单,一鼓作气,把asp.net也写了。    简单起见,数据库操作用ADO.N...
  • marroow
  • marroow
  • 2013年01月20日 11:58
  • 983

【ASP.NET】ADO.NET

在我们编程的这么长时间以来,几乎每个程序都需要我们与数据库打交道,对数据的访问和处理都是少不了的操作。在ASP.NET中,它给我们提供了ADO.NET技术,ADO.NET提供了对关系数据、XML和应用...

ASP.NET开发大全第7章.数据库与ADO.NET基础

第7章  数据库与ADO.NET基础 数据库在任何应用程序开发中都非常的重要,特别在ASP.NET应用程序开发中,数据库通常被用来保存用户的信息、文章内容等数据,同时数据库也能够提供用户进行查询、搜...

asp.net学习总结——ADO.net(对Sql Server进行操作的数据访问类)

ADO.net(对Sql Server进行操作的数据访问类)

在asp.net程序里调整ado.net连接池

By Dmitri Khanine Opening a database connection is a resource intensive and time consuming operation...
  • lchyz89
  • lchyz89
  • 2012年08月24日 15:39
  • 788

Asp.net 和Ado.net的区别和不同

ASP.NET是建立在公共语言运行库上的编程框架,可用于在服务器上生成功能强大的 Web 应用程序。 与以前的Web开发模型相比,ASP.NET 提供了数个重要的优点: 增强的性能。 ASP.NE...
  • yuzifen
  • yuzifen
  • 2011年09月03日 17:20
  • 2514

【Asp.Net】——ADO.NET为访问数据插上了翅膀

【前言】 前面在介绍asp.net的软件要求的时候提到了MDAC的安装,其实安装它的目的就是为了让我们更加安全,便利的访问数据库,它的实质就是为asp.net的程序提供了访问数据...

详解ASP.NET MVC 2中的新ADO.NET实体框架

对于ADO.NET实体框架,我们把它当做ASP.NET MVC 2的一项重大转变。它克服了以往的错误,提供更强的API,这一切都有利于开发人员的工作。   ...
  • yuhope
  • yuhope
  • 2011年12月27日 23:32
  • 146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp中ADO的优化
举报原因:
原因补充:

(最多只允许输入30个字)