加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

什么才是进步ASP机能的最佳选择(续二)

发布时间:2020-12-28 18:20:46 所属栏目:编程 来源:网络整理
导读:当行使一个记录集时,是否应该建设一个单独的Connection工具? 要想正确答复这个题目,必要在两个差异环境下检讨测试功效:第一是每页执行一个数据库处理赏罚的环境,第二是每页执行多个数据库处理赏罚的环境。 在前面的例子中,我们已经建设了一个单独的Connection对

当行使一个记录集时,是否应该建设一个单独的Connection工具?
  要想正确答复这个题目,必要在两个差异环境下检讨测试功效:第一是每页执行一个数据库处理赏罚的环境,第二是每页执行多个数据库处理赏罚的环境。

  在前面的例子中,我们已经建设了一个单独的Connection工具,并将它转达到记录集的ActiveConnection 属性。可是也有也许仅仅把毗连字符勾串报到这个属性中,从而可以停止一个特另外步调,即在剧本( ADO__03.asp )中例示和设置一个单独的组件:

  objRS.ActiveConnection = Application("Conn")

什么才是进步ASP机能的最佳选择(续二)

  尽量我们如故在记录齐集建设了一个毗连,但它是在很是优化的环境下建设的,以是刚一开始我们就看到启动时刻比早年的测试镌汰了23%,同预料中一样,同每个记录的表现时刻险些没有什么不同。

  因此,我们的第二个法则是:

  * 当行使一个单个记录集时,将毗连字符勾串报到ActiveConnection属性中。

  下面要确定当在一个页面上建设多个记录集时,这个逻辑是否依然创立。为测试这个环境,我引入了FOR 轮回,将前面的例子一再10次。在这个测试中,我们还将研究3种选择:

  第一,我们在每个轮回中建设并烧毁Connection 工具( ADO__04.asp ):

  Dim i

  For i = 1 to 10

  Set objConn = Server.CreateObject("ADODB.Connection")

  objConn.Open Application("Conn")

  Set objRS = Server.CreateObject("ADODB.Recordset")

  objRS.ActiveConnection = objConn

  objRS.CursorType = 0 'adOpenForwardOnly

  objRS.LockType = 1 'adLockReadOnly

  objRS.Open Application("SQL")

  If objRS.EOF Then

  Response.Write("No Records Found")

  Else

  'write headings

  ...

  'write data

  ...

  End If

  objRS.Close

  Set objRS = Nothing

  objConn.Close

  Set objConn = Nothing

  Next

  第二,在轮回外建设一个单独的Connection 工具,并与每个记录集共享它( ADO__05.asp ):

  Set objConn = Server.CreateObject("ADODB.Connection")

  objConn.Open Application("Conn")

  Dim i

  For i = 1 to 10

  Set objRS = Server.CreateObject("ADODB.Recordset")

  objRS.ActiveConnection = objConn

  objRS.CursorType = 0 'adOpenForwardOnly

  objRS.LockType = 1 'adLockReadOnly

  objRS.Open Application("SQL")

  If objRS.EOF Then

  Response.Write("No Records Found")

  Else

  'write headings

  ...

  'write data

  ...

  End If

  objRS.Close

  Set objRS = Nothing

  Next

  objConn.Close

  Set objConn = Nothing

  第三,在每个轮回中将毗连字符勾串报到ActiveConnection 属性( ADO__06.asp ):

  Dim i

  For i = 1 to 10

  Set objRS = Server.CreateObject("ADODB.Recordset")

  objRS.ActiveConnection = Application("Conn")

  objRS.CursorType = 0 'adOpenForwardOnly

  objRS.LockType = 1 'adLockReadOnly

  objRS.Open Application("SQL")

  If objRS.EOF Then

  Response.Write("No Records Found")

  Else

  'write headings

  ...

  'write data

  ...

  End If

  objRS.Close

  Set objRS = Nothing

  Next

什么才是进步ASP机能的最佳选择(续二)

  你也许已经猜到了,在每个轮回中建设并烧毁Connection 工具是一个低服从的要领。可是令人受惊的是,仅仅在每个轮回中转达毗连字符串比共享单一毗连工具的服从只低一点点。

  尽量云云,我们的第3条法则是:

  * 在一个页面上行使多个记录集时,建设一个Connection 工具,在ActiveConnection 属性中一再行使它。

指针和锁的范例中,哪些是最有用的?
  到今朝为止,我们全部测试都只用了只向前(Forward Only )的指针在记录齐集轮回。可是,ADO还为记录集提供了3种范例的指针:Static(静态),Dynamic(动态)和 Keyset(键盘)。每一种都提供了特另外成果,好比向前和向后移动以及当别人成立数据时可以看到修改环境的成果。不外,接头这些指针范例的内在不是本文接头的范畴。我把这些留给你本身。下面是各类范例的较量说明。

什么才是进步ASP机能的最佳选择(续二)

  与它们的同类Forward Only 对比,这些特另外指针都明明地造成了更大的负载( ADO__03.asp )。其它这些指针在轮回时代也更慢。我想与你一路分享的一条忠告是要停止这种设法:“我不时地必要一下Dynamic 指针,以是爽性老是用它算了。”

  从本质上说,同样的题目也合用于锁的范例。前面的测试中只行使了Read Only(只读)范例的锁。可是,尚有三种范例的锁:Lock Pessimistic、 Lock Optimistic和Lock Batch Optimistic。同指针的选择一样,这些锁也为处理赏罚记录齐集的数据提供了特另外成果和节制。同样,我将进修每种锁配置的恰当用途的内容留给你本身。

什么才是进步ASP机能的最佳选择(续二)

  以是引导我们思量法则4的逻辑很简朴:行使最得当你的使命的最简朴的指针和锁的范例。

获取一个记录集最好的方法是什么?
  到今朝为止,我们只是通过Recordset 工具来规复记录集。可是ADO还提供了一些获取记录集的间接要领。下一个测试就将ADO__03.asp 中的值与直接从一个Connection工具中建设一个记录集工具( CONN_01.asp )来较量。

  Set objConn = Server.CreateObject("ADODB.Connection")

  objConn.Open Application("Conn")

  Set objRS = objConn.Execute(Application("SQL"))

什么才是进步ASP机能的最佳选择(续二)

  我们看到,负载有一个稍微的增进,表现每笔记录的时刻没有变革。

  然后,我们看看从一个Command 工具中直接建设一个Recordset 工具( CMD__01.asp ):

  Set objCmd = Server.CreateObject("ADODB.Command")

  objCmd.ActiveConnection = Application("Conn")

  objCmd.CommandText = Application("SQL")

  Set objRS = objCmd.Execute

什么才是进步ASP机能的最佳选择(续二)

  我们再次看到负载有一个稍微的增进,每个记录的表现时刻有一个名义上的区别。固然最后这两种要领对机能的影响很小,却有一个大题目必要思量。

  通过Recordset 类建设一个记录集对付节制如那里理赏罚记录集提供了最大的机动性。固然其余要领也没有提出一个压倒性的机能题目,可是你会被默认状态下返回何种指针范例和锁范例而狐疑,这些对付你的特定需求来说不必然是最优的。

  以是,除非由于某种非凡缘故起因你必要其余要领的话,请遵循第5条法则:通过ADODB.Recordset 类例示记录集以得到最好的机能和最大的机动性。

是否应该断开记录集?
  ADO为断开一个记录集提供了一种选择,记录集要在一个向前查询中规复全部数据、封锁毗连、行使一个当地(或客户)指针在数据齐集移动。这还提供了一个早期开释毗连的机遇。这种环境对付处理赏罚长途数据处事是须要的,由于这种环境下数据必需从数据库断开。可是对付平凡的用途,这样做有甜头吗?

  下面我们增进了CursorLocation 属性,打开记录集后封锁毗连( CLIENT1.asp ):

  Set objRS = Server.CreateObject("ADODB.Recordset")

  objRS.CursorLocation = 3 ' adUseClient

  objRS.ActiveConnection = Application("Conn")

  objRS.LockType = 1 ' adLockReadOnly

  objRS.Open Application("SQL")

  objRS.ActiveConnection = Nothing

什么才是进步ASP机能的最佳选择(续二)

  从理论上说,这个技能应该导致机能更快。缘故起因有两个:起首,在记录齐集移动时,停止了通过毗连的一再哀求;其次通过较早地打消毗连减轻了资源需求。可是,在行使客户端指针时,服从低得很明明。也许是因为当行使客户指针位置时,不管你的配置是什么,CursorType 都被修改成Static。

  法则6是这样的:除非是一个断开的情形中所要求的,停止行使断开的记录集。

什么是配置记录集属性的最好要领?
  前面全部的测试都是通过单独的属性配置来直接配置记录集的属性的。可是Recordset.Open 函数可觉得我们所必要的全下属性吸取特另外参数。固然对付每个属性来说,单独的代码行易于阅读和维护,它们照旧要别离执行一个单独函数挪用,必需通过COM界面来荟萃( ADO__07.asp ):

  Set objRS = Server.CreateObject("ADODB.Recordset")

  objRS.Open Application("SQL"),Application("Conn"),1

  ' adForwardOnly,adLockReadOnly

什么才是进步ASP机能的最佳选择(续二)

  这些要领在负载上带来得不同小得惊人,于是我们获得法则7:不要对单独配置记录集属性感想担忧。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读