|            
                         五、使用记录集时是否应该创建单独的连接对象?   要正确地回答这个问题,我们必须分析两种不同条件下的测试:第一,页面只有一个数据库事务;第二,页面有多个数据库事务。 
   在前例中,我们创建了一个单独的Connection对象并将它赋给Recordset的ActiveConnection属性。然而,如ADO__03.asp所示,我们也可以直接把连接串赋给ActiveConnection属性,在脚本中初始化和配置Connection对象这一额外的步骤可以省去。  objRS.ActiveConnection = Application("Conn") 
   虽然Recordset对象仍旧要创建一个连接,但此时的创建是在高度优化的条件下进行的。因此,与上一次测试相比,页面开销又下降了23%,而且如预期的一样,单个记录的显示时间没有实质的变化。 
   因此,我们的第二个规则如下: 
  如果只使用一个记录集,直接把连接串赋给ActiveConnection属性。   接下来我们检查页面用到多个记录集时,上述规则是否仍旧有效。为测试这种情形,我们引入一个FOR循环将前例重复10次。在这个测试中,我们将研究三种变化: 
   第一,如ADO__04.asp所示,在每一个循环中建立和拆除Connection对象:  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 
 
 
 
   第二,如ADO__05.asp所示,在循环外面创建Connection对象,所有记录集共享该对象:  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 
   第三,如ADO__06.asp所示,在每一个循环内把连接串赋给ActiveConnection属性:  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   
   就象我们可以猜想到的一样,在循环内创建和拆除连接对象是效率最差的方法。不过,令人惊异的是,在循环内直接把连接串赋给ActiveConnection属性只比共享单个连接对象稍微慢了一点。 
   尽管如此,第三规则应该为: 
  同一页面内用到多个记录集时,创建单一的连接对象并通过ActiveConnection属性共享它。  (出处:热点网络)  
 |