提高ASP性能的最佳选择(续二)(2)

2008-02-23 05:06:20来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折



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

  objConn.Open Application("Conn")

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


  我们看到,负载有一个轻微的增加,显示每条记录的时间没有变化。

  然后,我们看看从一个Command 对象中直接创建一个Recordset 对象( CMD__01.asp ):

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

  objCmd.ActiveConnection = Application("Conn")

  objCmd.CommandText = Application("SQL")

  Set objRS = objCmd.Execute


  我们再次看到负载有一个轻微的增加,每个记录的显示时间有一个名义上的区别。虽然最后这两种方法对性能的影响很小,却有一个大问题需要考虑。

  通过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


  从理论上说,这个技术应该导致性能更快。原因有两个:首先,在记录集中移动时,避免了通过连接的重复请求;其次通过较早地取消连接减轻了资源需求。但是,在使用客户端指针时,效率低得很明显。可能是由于当使用客户指针位置时,不管你的设置是什么,CursorType 都被修改成Static。

  规则6是这样的:除非是一个断开的环境中所要求的,避免使用断开的记录集。

什么是设置记录集属性的最好方法?
  前面所有的测试都是通过单独的属性设置来直接设置记录集的属性的。但是Recordset.Open 函数可以为我们所需要的全部属性接收额外的参数。虽然对于每个属性来说,单独的代码行易于阅读和维护,它们还是要分别执行一个单独函数调用,必须通过COM界面来集合( ADO__07.asp ):

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

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

  ' adForwardOnly, adLockReadOnly


  这些方法在负载上带来得差别小得惊人,于是我们得到规则7:不要对单独设置记录集属性感到担心

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:提高ASP性能的最佳选择(续一)

下一篇:提高ASP性能的最佳选择(续三)