ich weiß gerade nicht, ob ich was falsch mache oder ob ich einen Fehler im PB gefunden habe.
In einem Programm bearbeite ich sehr viele Images seriell hintereinander (immer nur eines zur Zeit im Speicher). Die Images werden mit LOADIMAGE() geladen und später mit FREEIMAGE() wieder freigegeben.
Trotzdem wird der RAM-Speicher nach und nach weniger bzw. im Taskmanager kann man verfolgen, wie das Programm nach und nach mehr Speicher konsumiert.
Hier ein Beispiel:
Code: Alles auswählen
EnableExplicit
UseTIFFImageDecoder()
UseJPEGImageDecoder()
Enumeration
#img_handle
EndEnumeration
Global memex.MEMORYSTATUSEX
Global i
For i = 1 To 10000
memex.MEMORYSTATUSEX
memex\dwLength = SizeOf(MEMORYSTATUSEX)
GlobalMemoryStatusEx_(@memex)
Debug Str(i) +" RAM-Verbrauch vor IMAGELOAD(): "+Str((memex\ullTotalPhys-memex\ullAvailPhys)/1024/1024)+" MB"
LoadImage(#img_handle, "test.tif")
memex.MEMORYSTATUSEX
memex\dwLength = SizeOf(MEMORYSTATUSEX)
GlobalMemoryStatusEx_(@memex)
Debug "RAM-Verbrauch nach IMAGELOAD(): "+Str((memex\ullTotalPhys-memex\ullAvailPhys)/1024/1024)+" MB"
FreeImage(#PB_All)
memex.MEMORYSTATUSEX
memex\dwLength = SizeOf(MEMORYSTATUSEX)
GlobalMemoryStatusEx_(@memex)
Debug "RAM-Verbrauch nach FREEIMAGE: "+Str((memex\ullTotalPhys-memex\ullAvailPhys)/1024/1024)+" MB" + #LF$
Next
Ich habe es mit zig verschiedenen Images nachvollzogen, das Problem taucht immer auf.
Nachvollziehbar unter Windows 10 in PB 5.42/5.45/5.61 (x86 - x64 habe ich nicht probiert).
Fehler bei mir oder im PB... das ist die Frage.
PS: die Speicherabfrage habe ich mir bei RSBASIC ausgeliehen