0
使用ADODB - 是否有一個函數來檢索結果查詢的實際大小? (vb6)vb6 ADODB記錄集大小檢索
我不是說它的數量我的意思是它的實際大小, 我想知道需要多少數據才能通過網絡來檢索我的查詢結果。如果沒有這樣的事情存在我想我總是可以把所有的數據檢索,把它轉換爲字節,並開始計算,但我想避免它,如果有東西已經建成(應該是)。
謝謝!
PS 使用.mdb文件,使用ADODB 2.0文庫
使用ADODB - 是否有一個函數來檢索結果查詢的實際大小? (vb6)vb6 ADODB記錄集大小檢索
我不是說它的數量我的意思是它的實際大小, 我想知道需要多少數據才能通過網絡來檢索我的查詢結果。如果沒有這樣的事情存在我想我總是可以把所有的數據檢索,把它轉換爲字節,並開始計算,但我想避免它,如果有東西已經建成(應該是)。
謝謝!
PS 使用.mdb文件,使用ADODB 2.0文庫
下面是獲取使用ADO
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 * [email protected]
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
這裏客戶機側的記錄之後報告WorkingSetSize
的樣品是經過三個連續的結果處決
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
用於測試或作爲應用程序內的設施?您應該添加標識您使用的數據庫系統的標籤。 – 2014-11-08 14:30:58
大約8年前,我將一些代碼拼湊在一起,然後按照你的要求去做。我被要求提高性能,因此創建了一些將「開始追蹤」和「結束追蹤」調用放入每個子程序的代碼。這些會得到像CPU,磁盤I/O和字節發送/接收並登錄到表。因此,我們將關閉工作站上不需要的所有內容,然後運行我們的測試,然後運行報告以關注最差的代碼。這是Office 2002和Win-XP,所以不知道它是否仍然有效。如果您有興趣,請告訴我。 – 2014-11-08 21:00:05
由於需要大量I/O來完成最終結果,因此無法對結果內容進行估算。 – Bob77 2014-11-09 19:35:11