Speicher eines Bildes manuell freigeben

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

das wurgel

Betreff: Speicher eines Bildes manuell freigeben

BeitragDi, Sep 28, 2010 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Comminity

Wenn ich zu Hauf und ununterbrochen Bilder lade, und sie wegwerfe indem ich die Referenz überschreibe, kommt der GC irgendwie nicht hinterher und es gibt nach einiger Zeit und ein bisschen mehr als ein GB Arbeitsspeicher den Fehler "EXCEPTION_ACESS_VIOLATION". Das passiert auch, wenn ich den GC manuell aufrufe.

Probiert das z.B. mal auf einen Ordner, der viele Bilder enthält:

BlitzMax: [AUSKLAPPEN]
SuperStrict

Graphics 800, 600, 0, 60, 2

Local path$="C:\Users\Ich\Pictures\"
Local files$[]=LoadDir(path)

GCSetMode 2 'rein editiert

For Local file$ = EachIn(files)
Local ext$=ExtractExt(file)
Select ext.toLower()
Case "bmp", "jpg", "jpeg", "tga", "png"
Local image:TImage = LoadImage(path+file)
If image Then
DrawImage image, 0,0
Flip
Cls
GCCollect()
EndIf
End Select
Next


Wie kann man das vermeiden?

MfG

edit:
Hab jetzt noch was getestet: Selbst wenn ich das Programm komplett anhalte, will der GC seine Arbeit nicht tun. Ich versteh das nicht.
1 ist ungefähr 3
  • Zuletzt bearbeitet von das wurgel am Do, Sep 30, 2010 17:10, insgesamt 2-mal bearbeitet

BladeRunner

Moderator

BeitragMi, Sep 29, 2010 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Passiert es auch wenn Du den GC auf "Manual Collect' stellst?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

das wurgel

BeitragDo, Sep 30, 2010 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh das hab ich vergessen... Es passiert aber immer noch das selbe. Eigentlich müsste es ja auch so funzen.

edit:
Der Fehler kommt bei LoadPixmap nicht.
1 ist ungefähr 3

BladeRunner

Moderator

BeitragFr, Okt 01, 2010 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Pixmaps werden ja in den RAM geladen, nicht inden VRAM. Vielleicht hilft es Dir dann und wann ein neues Graphics()-Objekt zu erstellen und damit den Grakaspeicher zu entmüllen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

das wurgel

BeitragFr, Okt 01, 2010 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon, aber bei LoadImage wird erstmal eine Pixmap erstellt, deren Speicher dann nicht mehr freigegeben wird. Es liegt also gewissermaßen schon an den Pixmaps, nur passiert es komischerweise nicht wenn man CreatePixmap benutzt.
Der Debugger zeigt mir diese Zeile an:
pixmap.bmx hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
pixmap.pixels=MemAlloc( capacity )

Es ist auch der benutzte RAM der während der laufzeit stetig ansteigt. Neue Graphics-Objekte zu erstellen hilft da auch nichts (Ich habs natürlich auch Mal ausprobiert), aber trotzdem danke schonmal für die Hilfe.

Und was ich ich noch gerne wissen würde:
Kommt der Fehler bei euch eigentlich auch?
Mein Betriebssytem: Windows 7 64bit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group