有哪些工具可用於將VB6應用程序中的內存消耗歸入多個組件? 例如,在Process Explorer中,我可以通過觀察各種計數器(專用字節,工作集等)來獲取整個應用程序佔用的內存。我想深入一些,並瞭解在運行時創建的各種組件或對象佔用了多少內存。例如,計算在運行時緩存數據的大集合佔用多少內存,以及它如何根據集合中元素的數量進行更改。用於識別VB6應用程序中內存耗盡的工具
12
A
回答
2
1
MS站點上還有一個名爲processmonitor.exe的工具。它會報告每個請求調用,並且您可以使用其過濾功能來只監視應用程序的進程請求。
5
我最喜歡的工具必須是DevPartner,雖然在1,500英鎊的流行音樂它並不便宜。它雖然比內存泄漏檢查要多得多,但如果這就是你所需要的,你可能是地毯式轟炸螞蟻。
如果您想查看您的應用程序是否正確釋放資源,請使用我寫的函數將內存轉儲到給定位置。我首先會緩存每個變量的地址,然後在關閉時可以調用DumpVariableMemory傳遞這些位置的引用來查看它們是否已被釋放。
如果您還沒有一個已經,你需要添加一個聲明FOPR CopyMemory的太:)
Public Function DumpVariableMemory(ByVal lngVariablePointer&, _
ByVal lngBufferSizeInBytes&) As String
'' * Object Name: DumpVariableMemory
'' * Type: Function
'' * Purpose: Returns a memory dump of the variable or pointer location
'' * Created: 21/08/2006 - 17:41:32
'' * Coder: Richard Pashley - NUPUK00008148
'' * Build Machine: W-XPRP-77
'' * Encapsulation: Full
'' * Parameters: lngVariablePointer - Long - Pointer to the data to dump
'' * lngBufferSizeInBytes - Long - Size of the dump to ouput in bytes
'' * Returns: - - String - Memory dump output as a string
'' * This will dump the memory location starting at the pointer address and
'' * ending at the address plus the offset (lngBufferSizeInBytes).
'' * You can use LenB to determine the size of the variable for the
'' * lngBufferSizeInBytes parameter if required.
'' * Example: DebugPrint DumpVariableMemory(VarPtr(lngMyLongValue),LenB(lngMyLongValue)
'' * Modified By: [Name]
'' * Date: [Date]
'' * Reason: [NUPUKxxxxxxxxx]
'' Declare locals
Dim lngBufferIterator& '' Buffer iterator
Dim lngBufferInnerIterator& '' Buffer loop inner iterator
Dim bytHexDumpArray() As Byte '' Received output buffer
Dim strDumpBuffer$ '' Formatted hex dump construction buffer
Dim lngValidatedBufferSize& '' Validated passed buffer size
'' Turn on error handling
On Error GoTo DumpVariableMemory_Err
'' Resize output buffer
ReDim bytHexDumpArray(0 To lngBufferSizeInBytes - 1) As Byte
'' Retrieve memory contents from supplied pointer
Call CopyMemory(bytHexDumpArray(0), _
ByVal lngVariablePointer, _
lngBufferSizeInBytes)
'' Format dump header
strDumpBuffer = String(81, "=") & vbCrLf & _
"Pointer Address = &h" & Hex$(lngVariablePointer) & _
" Ouput Buffer Size = " & FormatBytes(lngBufferSizeInBytes)
'' Add header seperator
strDumpBuffer = strDumpBuffer & _
vbCrLf & String(81, Chr$(61))
'' Validate buffer dimensions
If lngBufferSizeInBytes Mod 16 = 0 Then
'' Validated ok so assign
lngValidatedBufferSize = lngBufferSizeInBytes
Else
'' Refactor to base 16
lngValidatedBufferSize = _
((lngBufferSizeInBytes \ 16) + 1) * 16
End If
'' Iterate through buffer contents
For lngBufferIterator = 0 To (lngValidatedBufferSize - 1)
'' Determine if first row
If (lngBufferIterator Mod 16) = 0 Then
'' Format dump output row
strDumpBuffer = strDumpBuffer & vbCrLf & Right$(String(8, Chr$(48)) _
& Hex$(lngVariablePointer + lngBufferIterator), 8) & Space(2) & _
Right$(String(4, Chr$(48)) & Hex$(lngBufferIterator), 4) & Space(2)
End If
'' Determine required dump buffer padding
If lngBufferIterator < lngBufferSizeInBytes Then
'' Pad dump buffer
strDumpBuffer = strDumpBuffer & Right$(Chr$(48) & _
Hex(bytHexDumpArray(lngBufferIterator)), 2)
Else
'' Pad dump buffer
strDumpBuffer = strDumpBuffer & Space(2)
End If
'' Determine required dump buffer padding
If (lngBufferIterator Mod 16) = 15 Then
'' Pad dump buffer
strDumpBuffer = strDumpBuffer & Space(2)
'' Iterate through buffer row
For lngBufferInnerIterator = (lngBufferIterator - 15) To lngBufferIterator
'' Validate row width
If lngBufferInnerIterator < lngBufferSizeInBytes Then
'' Validate buffer constraints
If bytHexDumpArray(lngBufferInnerIterator) >= 32 And _
bytHexDumpArray(lngBufferInnerIterator) <= 126 Then
'' Ouput data to dump buffer row
strDumpBuffer = strDumpBuffer & _
Chr$(bytHexDumpArray(lngBufferInnerIterator))
Else
'' Pad dump buffer
strDumpBuffer = strDumpBuffer & Chr$(45)
End If
End If
Next
'' Determine required dump buffer padding
ElseIf (lngBufferIterator Mod 8) = 7 Then
'' Pad dump buffer
strDumpBuffer = strDumpBuffer & Chr$(45)
Else
'' Pad dump buffer
strDumpBuffer = strDumpBuffer & Space(1)
End If
Next
'' Assign result to function output
DumpVariableMemory = strDumpBuffer & _
vbCrLf & String(81, Chr$(61)) & vbCrLf
Exit_Point:
Exit Function
'' Error Handling
DumpVariableMemory_Err:
LogError "modNYFixLibrary.DumpVariableMemory", Err.Number, Err.Description
DumpVariableMemory = String(81, Chr$(61)) & vbCrLf & _
"DumpFailed!" & vbCrLf & String(81, Chr$(61))
GoTo Exit_Point
Resume
End Function
2
Memory Validator可以告訴你內存在VB6程序分配(和泄露)(和C++,C,Delphi,Fortran 95 ...)。
相關問題
- 1. 用於識別.Net應用程序中的內存泄漏的免費工具
- 2. Android工作室應用程序隨機耗盡內存
- 3. 如何防止使用CakePHP應用程序的內存耗盡?
- 4. Tomcat 6 Web應用程序隨時間耗盡內存
- 5. 應用程序電池消耗工具
- 6. mysql_free_result()中的內存耗盡
- 7. Codeigniter - 內存耗盡
- 8. imagejpeg內存耗盡
- 9. setImageResource耗盡內存
- 10. java.lang.OutOfMemoryError:內存耗盡]
- 11. PHP內存耗盡
- 12. 創建內存消耗應用程序
- 13. Windows應用程序內存消耗
- 14. Windows Phone應用程序內存消耗
- 15. 用於識別CALayer對象的iOS應用程序的UI自動化工具
- 16. 識別ASP.NET應用程序中的內存問題
- 17. 如何在droid中製作益智應用程序而不會耗盡內存?
- 18. 內存耗盡:用於使用差異的大文件
- 19. Android(應用程序)小工具的識別
- 20. 用於分析在IE上消耗的內存的工具
- 21. 內存耗盡時使用laravel brainsocket
- 22. 內存耗盡使用php://輸入
- 23. FileService用大文件耗盡內存
- 24. 由於乘客中有多個線程,內存耗盡
- 25. Android應用程序小工具 - 語音識別器
- 26. VB.NET:內存耗盡System.Drawing.dll
- 27. PHP內存耗盡在32MB
- 28. gdb:虛擬內存耗盡
- 29. java.lang.OutOfMemoryError:[內存耗盡]在android
- 30. Android:耗盡大量內存?
此工具不能深入進程監視器,因爲它不知道VB6內存使用情況。 – 2011-06-27 20:06:10