Jakie narzędzia są dostępne do przypisania zużycia pamięci w aplikacji VB6 do wielu składników? Mogę pobrać pamięć zużywaną przez całą aplikację, oglądając różne liczniki (prywatne bajty, zestaw roboczy itd.), Na przykład w Eksploratorze procesów. Chcę pójść o poziom wyżej i zrozumieć, ile pamięci jest zużywane przez różne komponenty lub obiekty tworzone w środowisku wykonawczym. Na przykład sprawdź, ile pamięci zużywa duża kolekcja, która buforuje dane w czasie wykonywania i jak zmienia się w zależności od liczby elementów w kolekcji.Narzędzia do identyfikacji świnek pamięci w aplikacjach VB6
Odpowiedz
Nie jestem pewien, czy jakiekolwiek publicznie dostępne (bezpłatne) narzędzia będą profilować kod VB6 do poziomu modułu. Istnieje kilka profilerów pamięci dostępnych dla C/C++ i .NET, ale nie wiele na VB6, które widziałem. Wygląda na to, że wszyscy dawni dostawcy (IBM Purify, Compuware Devpartner/Boundschecker) w tym obszarze zostali wykupieni lub przeniesieni tylko do wsparcia .NET.
Możesz spróbować GlowCode. Określa obsługę C++, ale także podkreśla natywne obrazy x86 systemu Win32.
Firma Microsoft publikuje DebugDiag, która obsługuje wykrywanie wycieków pamięci dla .NET lub Win32, choć nigdy nie korzystałem z VB. Może nie wyświetlać zaległych alokacji na poziomie modułu, ale założę się, że przynajmniej przydzieli to, które biblioteki/biblioteki dll przydzieliły najwięcej pamięci.
Na stronie MS znajduje się inne narzędzie o nazwie processmonitor.exe. Zgłasza każde wywołanie żądania i można użyć jego funkcji filtrowania do monitorowania tylko żądań procesów aplikacji.
Moje ulubione narzędzie to DevPartner, ale za 1,500 funtów pop nie jest tanie. To ma dużo więcej wspólnego z wyjątkiem sprawdzania przecieków pamięci, ale jeśli to wszystko, czego potrzebujesz, możesz być mrówkami bombardującymi dywan.
Jeśli chcesz sprawdzić, czy Twoja aplikacja prawidłowo udostępnia zasoby, użyj tej funkcji, którą napisałem, aby zrzucić pamięć w określonej lokalizacji. Najpierw buforowałbym adresy każdej z twoich zmiennych, a następnie przy zamykaniu można nazwać DumpVariableMemory przekazując odniesienia do tych lokalizacji, aby sprawdzić, czy zostały one zwolnione.
Jeśli nie masz, musisz dodać declare fopr CopyMemory też :)
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
Memory Validator może powiedzieć, gdzie pamięć jest alokowana (a wyciekły) w programach VB6 (i C++, C, Delphi, Fortran 95 ...).
- 1. Automatyczne narzędzia do testowania Vb6 UI?
- 2. Test wycieków pamięci w aplikacjach .NET
- 3. Liczba świnek Hadoop
- 4. Jak rozwiązywać problemy z wyciekami pamięci w aplikacjach Windows Store?
- 5. Opis narzędzia do sprawdzania nieszczelności pamięci - iPhone
- 6. Narzędzia do analizy zrzutu pamięci z Node.js
- 7. Narzędzia do analizy pamięci/wydajności dla Androida
- 8. LINQ kwerendy do identyfikacji fragmentów w serii
- 9. VB6 do konwersji VB.net
- 10. Jak znaleźć wykorzystanie pamięci w aplikacjach WWW w Apache tomcat
- 11. Jak debugować MemoryError w Pythonie? Narzędzia do śledzenia użycia pamięci?
- 12. Google Chrome - alfanumeryczne hashy do identyfikacji rozszerzeń
- 13. Sprawdzanie użycia pamięci długoterminowej w aplikacjach na iOS
- 14. Nieszczelność pamięci za pomocą narzędzia ContextMenuStrip
- 15. Jak pisać do konsoli debugowania w VB6?
- 16. Narzędzia do debugowania pamięci dla systemu Android Kod NDK C++
- 17. Jakie są niektóre techniki i narzędzia do profilowania nadmiernego rozmiaru kodu w aplikacjach C/C++?
- 18. Phash vs. SIFT w identyfikacji Podobne
- 19. Obsługa kolumn identyfikacji Redshift w SQLAlchemy
- 20. Zdalne debugowanie w VB6
- 21. Czy w eliksirie występuje funkcja identyfikacji?
- 22. Czy w Rust istnieje wbudowana funkcja identyfikacji?
- 23. Jak zbudować aplikację konsoli VB6
- 24. Powiadomienia automatyczne w aplikacjach Azure w aplikacjach internetowych
- 25. dostać GuiApplication prowadzenia Sap logowania VB6 do C#
- 26. Pobierz obraz do lokalnego magazynu w aplikacjach Metro style
- 27. Limit linii kodu w VB6
- 28. Monitor procesu/dyspozytora w VB6
- 29. Dlaczego Squeak używa kolorów do identyfikacji przycisków myszy?
- 30. Wykryj, czy Debugger jest dołączony do VB6
To narzędzie nie może przejść głębiej niż Monitor procesu, ponieważ nie wie o użyciu pamięci VB6. –