Der GC in einer DLL [SOLVED]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: Der GC in einer DLL [SOLVED]

BeitragSo, Apr 03, 2011 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Ich habe derzeit das Problem, dass der GC in einer DLL anscheindend nicht richtig funktioniert. Die DLL frisst sich unaufhörlich mit Speicher zu, was auf die Dauer keinen Spaß macht.
Das Programm besteht in grober From aus folgendem Code:
BlitzMax: [AUSKLAPPEN]
Repeat
Select PollEvent()
Case EVENT_WINDOWCLOSE
Select EventSource()
..Code ..
End Select

Case EVENT_GADGETSELECT
Select EventSource()
..Code ..
End Select

Case 0
WaitTimer(timer)
SetGadgetText(lbl_fps, "FPS: " + GetFPS() + ", " + GCMemAlloced() / 1024)
End Select
Forever


Mit folgendem Framework:
BlitzMax: [AUSKLAPPEN]
Framework maxgui.drivers
Import brl.timer
Import brl.eventqueue


Und einem selbst geschrieben Timer, da der Standard-Timer in der DLL nicht funktioniert:
BlitzMax: [AUSKLAPPEN]
Type TTimer
Field frequence:Int
Field delaytime:Int
Field lastcall:Int

Function Create:TTimer(value:Int, mode:Int = 0)
Local t:TTimer = New TTimer
If mode = 0 Then
t.frequence = value
t.delaytime = Int(1000.0 / value)
Else
t.delaytime = value
EndIf
Return t
End Function

Method Wait()
Delay Self.delaytime - (MilliSecs() - Self.lastcall)
Self.lastcall = MilliSecs()
End Method
End Type


Function CreateTimer:TTimer(freq:Int)
Return TTimer.Create(freq)
End Function

Function WaitTimer(timer:TTimer)
timer.Wait()
End Function


Der Timer ist auf 10 FPS eingestellt welche auch gehalten werden können.
Je mehr Code ich im "Case 0" Fall ausführe, oder je mehr Klick ich auf mein Fenster aus über (mehr Events), desto schneller frisst sich der GC voll.

Liegt dies an mir, an der DLL, oder am GC?
Kann ich das irgendwie beheben? Denn wenn sich der Speicher voll lädt, dann geht irgendwann nix mehr.

EDIT: Habe grade folgende in der "blitz_gc.win32.s" als Kommentar gefunden:
Zitat:
;Note:
;
;The bbGCEnter/bbGCLeave stuff below is for the Win32 only dll hack.
;
;Need a much nicer way to manage dlls...

Bringt mir das was?


SOLVED: So nachdem ich jetzt noch ein wenig mehr gesucht habe, sowohl im Internet, als auch in den tiefen von BRL.Blitz. Dort hatte ich den obigen Kommentar gefunden. Nachdem ich mir dann den Rest des Codes noch mal angeguckt habe, hab ich ein wenig mit GCEnter/GCLeave rumgespielt, und habe mein Problem gelöst.
Meine DLL wurde mittels eines Injectors in ein fremdes Programm injected, von dort aus have ich einen Thread der Hauptfunktion erstellt. Am Anfang dieser Funktion rufe ich einmal GCEnter auf, das löst all meine Probleme. Meine DlLL läuft jetzt mit nur 78kb an Speicher. Ein wahres wunderwerk.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group