【问题标题】:vb6 ADODB recordset size retrievalvb6 ADODB 记录集大小检索
【发布时间】:2014-11-10 22:49:18
【问题描述】:

使用 ADODB - 是否有一个函数可以检索结果查询的实际大小? (vb6)

我不是说它的数量,我是指它的实际大小, 我想知道需要通过网络使用多少数据来检索我的查询结果。

如果不存在这样的东西,我想我总是可以获取所有检索到的数据,将其转换为字节,然后开始计算,但如果已经内置了一些东西(应该是),我想避免它。

谢谢!

附言 使用 .mdb 文件,使用 adodb 2.0 库

【问题讨论】:

  • 用于测试或作为应用程序中的工具?您应该添加一个标签来标识您使用的数据库系统。
  • 我拼凑了一些代码,大约 8 年前,有点/有点像你要求的那样。我被要求提高性能,因此创建了一些代码,将“开始跟踪”和“结束跟踪”调用放入每个子例程中。这些将获取诸如 CPU、磁盘 I/O 和发送/接收的字节数并记录到表中。所以我们会关闭工作站上不需要的所有东西并运行我们的测试,然后运行报告以关注最差的代码。这是 Office 2002 和 Win-XP,所以不知道它是否还能正常工作。如果您有兴趣,请告诉我。
  • 您不能根据结果的内容进行估计,因为可能需要大量的 I/O 才能完成最终结果。

标签: ms-access vb6 adodb


【解决方案1】:

这是使用 ADO 获取客户端记录集后报告 WorkingSetSize 的示例

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function GetProcessMemoryInfo Lib "psapi" (ByVal hProcess As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long

Private Type PROCESS_MEMORY_COUNTERS
    cb                      As Long
    PageFaultCount          As Long
    PeakWorkingSetSize      As Long
    WorkingSetSize          As Long
    QuotaPeakPagedPoolUsage As Long
    QuotaPagedPoolUsage     As Long
    QuotaPeakNonPagedPoolUsage As Long
    QuotaNonPagedPoolUsage  As Long
    PagefileUsage           As Long
    PeakPagefileUsage       As Long
    PrivateUsage            As Long
End Type

Private Function pvGetWorkingSetSize() As String
    Dim uCounters       As PROCESS_MEMORY_COUNTERS

    On Error GoTo QH
    If GetProcessMemoryInfo(GetCurrentProcess(), uCounters, Len(uCounters)) <> 0 Then
        pvGetWorkingSetSize = Format$(pvToUnsigned(uCounters.WorkingSetSize) / 1024 / 1024, "0.00") & "MB"
    End If
QH:
End Function

Private Function pvToUnsigned(ByVal lValue As Long) As Currency
    Call CopyMemory(pvToUnsigned, lValue, 4)
    pvToUnsigned = pvToUnsigned * 10000@
End Function

'--- UI stuff

Private Sub Command1_Click()
    Const CONN_STR  As String = "Provider=SQLOLEDB;Data Source=UCSDB\R2;Initial Catalog=Dreem15_IVB_2;Integrated Security=SSPI"
    Dim rs          As ADODB.Recordset

    pvLog "Starting"
    Set rs = New ADODB.Recordset
    pvLog "After loading ADO"

    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open "SELECT 1 AS ID", CONN_STR, adOpenStatic, adLockBatchOptimistic
    pvLog "After loading SQLOLEDB"

    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open "SELECT TOP 10000 * FROM inv_Docs", CONN_STR, adOpenStatic, adLockBatchOptimistic
    pvLog "After fetching 10000 records"
    With New PropertyBag
        .WriteProperty "rs", rs
        pvLog "Propbag size: " & Format$(UBound(.Contents) / 1024 / 1024, "0.00") & "MB"
    End With
    pvLog "After destroy propbag"
    Set rs = Nothing
    pvLog "After destroy recordset"
End Sub

Private Sub Command2_Click()
    pvLog "Ping"
End Sub

Private Sub pvLog(sText As String)
    Text1.Text = Text1.Text & Format$(Timer, "0.00") & ": " & pvGetWorkingSetSize() & ", " & sText & vbCrLf
    Text1.SelStart = &H7FFF
    Refresh
End Sub

这是连续执行 3 次后的结果

60366.48: 17.71MB, Starting
60366.48: 18.04MB, After loading ADO
60366.51: 22.00MB, After loading SQLOLEDB
60366.74: 48.49MB, After fetching 10000 records
60368.34: 62.81MB, Propbag size: 6.04MB
60368.34: 50.73MB, After destroy propbag
60368.34: 28.63MB, After destroy recordset

60369.45: 28.67MB, Starting
60369.45: 28.68MB, After loading ADO
60369.47: 28.90MB, After loading SQLOLEDB
60369.71: 53.28MB, After fetching 10000 records
60371.30: 67.41MB, Propbag size: 6.04MB
60371.30: 55.33MB, After destroy propbag
60371.30: 33.88MB, After destroy recordset

60371.95: 33.88MB, Starting
60371.95: 33.88MB, After loading ADO
60371.96: 33.91MB, After loading SQLOLEDB
60372.20: 56.37MB, After fetching 10000 records
60373.80: 69.11MB, Propbag size: 6.04MB
60373.80: 57.03MB, After destroy propbag
60373.80: 34.09MB, After destroy recordset

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2015-09-08
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多