|
本帖最后由 百度不到去谷歌 于 2014-3-15 23:24 编辑
HHAAMM 发表于 2014-3-15 22:59
本帖到了几十层楼后,我个人对这个问题的关注点转到了这种写法的安全性上。这几天没少百度谷歌的去查资料, ...
这个我也发现了 我用测试指针地址的方法 看了 当set rs时候 是2个地址块交替利用
而不用 则是每次都要调用一个新的内存地址 我一直不知道怎么整理这个发现 因为没有相关资料支持 也不好描述 所以没说 测试地址的语句是这样的 “Jet引擎会重复利用以往内存而不会申请新的内存”。 就能与我的测试印证了- Public Sub 对象地址测试() '这个过程查看cnn
- Dim a(1 To 10, 1 To 2) As Object, i, rs As Object, cnn As Object, strCnn$
- strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0';Data Source=" & ThisWorkbook.FullName
- Sheet1.[B3:E12].ClearContents
- For i = 1 To 10
- Set a(i, 1) = CreateObject("ADODB.Connection") '创建一个连接对象
- a(i, 1).Open strCnn
- Set a(i, 2) = a(i, 1).OpenSchema(adSchemaTables) '打开一个系统查询赋值给rs
- Sheet1.Cells(2 + i, 2) = ObjPtr(ByVal a(i, 1)) 'cnn对象地址
- Sheet1.Cells(2 + i, 3) = ObjPtr(ByVal a(i, 2)) 'rs对象地址
- '这时候可以看到每个对象都有有具体的引用时,每次地址都不同,也就是都需要重新分配内存区
- Next
- For i = 1 To 10
- Set a(i, 1) = Nothing: Set a(i, 2) = Nothing
- Next
- For i = 1 To 10 '每次打开都调用set rs
- '创建一个连接对象,每次都用cnn引用,这样上一个就会处于无引用状态,下次set rs就直接引用了这个内存区
- '这里就会出现2个地址被交替使用的效果,只分配了2次内存,而达到了10次使用rs对象的效果,且后续引用时,前面
- '对象没有colse操作,而是直接写入新数据
- Set cnn = CreateObject("ADODB.Connection") '创建一个连接对象
- cnn.Open strCnn
- Set rs = cnn.OpenSchema(adSchemaTables) '打开一个系统查询赋值给rs
- Sheet1.Cells(2 + i, 4) = ObjPtr(ByVal cnn)
- Sheet1.Cells(2 + i, 5) = ObjPtr(ByVal rs)
- Sheet1.Cells(2 + i, 6) = ObjPtr(ByVal cnn.OpenSchema(adSchemaTables))
- Next
- Call 隐式创建对象测试
- Set rs = Nothing
- Set cnn = Nothing
- End Sub
- Public Sub 隐式创建对象测试() '这个过程查看无set rs情况
- Dim a(1 To 10, 1 To 2) As Object, i, rs As Object, cnn As Object, strCnn$
- strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0';Data Source=" & ThisWorkbook.FullName
- Sheet1.[G3:H12].ClearContents
- For i = 1 To 10 '每次打开都不调用set rs
- Set cnn = CreateObject("ADODB.Connection") '创建一个连接对象
- cnn.Open strCnn
- 'Set rs = cnn.OpenSchema(adSchemaTables) '打开一个系统查询赋值给rs
- Sheet1.Cells(2 + i, 7) = ObjPtr(ByVal cnn)
- Sheet1.Cells(2 + i, 8) = ObjPtr(ByVal cnn.OpenSchema(adSchemaTables))
- Next
- Set rs = Nothing
- Set cnn = Nothing
- End Sub
复制代码
SQL顺序连接多个工作簿速度的疑问.rar
(30.34 KB, 下载次数: 24)
|
评分
-
2
查看全部评分
-
|