ich kämpfe schon ein Weilchen mit einem Speicherleck. Hier der Versuch mein Problem in einem Minimalbeispiel zu verdeutlichen. Der Thread ist dabei, da er in meinem Programm auch vorhanden ist und ich das Problem zeitweise darauf zurückgeführt hatte. Jetzt bin ich einfach froh, dass es im Beispiel auch auftritt. Daher habe ich es einfach mal so gelassen.
Das Problem liegt darin, dass nach Beendigung der Prozedur der Speicher der Stringvariable offenbar nicht wieder freigegeben wird (lt. Taskmanager 50 MB(+) verwendeter RAM). Da die einzulesende Datei im Regelfall über 50 MB groß ist, natürlich etwas unschön.
Code: Alles auswählen
Global Teste.i = 1
Global Importdatei.s
Procedure Test()
Protected Importstring.s
Protected *Import
ReadFile(1,Importdatei)
*Import = AllocateMemory(Lof(1))
ReadData(1,*Import,Lof(1))
CloseFile(1)
ImportString = PeekS(*Import,-1,#PB_UTF8)
FreeMemory(*Import)
Teste = 0
EndProcedure
Procedure Thread(Dummy.i)
Delay(50)
Repeat
If Teste = 1
Test()
EndIf
ForEver
EndProcedure
OpenWindow(#PB_Any,100,100,900,500,"Test")
Importdatei = OpenFileRequester("Test","","*.*",0)
CreateThread(@Thread(),0)
Repeat
Event = WaitWindowEvent(1)
Until Event = #PB_Event_CloseWindow
Code: Alles auswählen
ImportString = PeekS(*Import,-1,#PB_UTF8)
Hat jemand eine Idee, wie ich die Problematik lösen könnte, bzw. wo ich einen Fehler in meiner Denke habe.
Ein
Code: Alles auswählen
Importstring = ""