Array Memory leak bei Thread

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

klin

Betreff: Array Memory leak bei Thread

BeitragDo, Feb 18, 2010 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute,
ich bin mir sehr unsicher obs ein Fehler von mir ist. Daher Poste ich doch lieber in diesem Forum^^
Also. Ich habe mir einen Server Programmiert wodrin Arrays sind. Ebenfalls benutze ich auch Threads. Aber ich bin total erschrocken, als ich im Taskmanager sah, dass es 70k Ram nach 20 min. verbrauchte! und jede sekunde immer mehr!
Ich zerlegte meinen ganzen code und schrieb einige Systeme / Engines usw. neu. Vergebens. Es verbrauchte immer noch.
Bis ich auf den teil gestoßen bin, wo ein Array mit Var=new int[100,100] machte. ABER was NOCH eigenartiger war, sobald ich bei build Threads abschaltete, verbrauchte es nix o.o Ich habe hier mal einen Beispiel code:
BlitzMax: [AUSKLAPPEN]

Framework BRL.Threads
Import BRL.LinkedList

Global List:TList=New TList

Type Blah

Field x:Int,y:Int

Field Tile1:Int[0,0],Tile2:Int[0,0],Tile3:Int[0,0],Tile4:Int[0,0],Tile5:Int[0,0]
Field Tile6:Int[0,0],Tile7:Int[0,0],Tile8:Int[0,0],Entity:Int[0,0]
Field Area:Int[0,0]

Function Add:Blah(x:Int,y:Int)
Local c:Blah=New Blah
c.x=x
c.y=y
ListAddLast List,c
Return c
End Function

Function Bam:Byte()
For x=EachIn List
Exit
Next
End Function

End Type

Global x:Blah=Blah.Add(100,100)
x.Tile1 = New Int[300+1,300+1]
x.Tile2 = New Int[300+1,300+1]
x.Tile3 = New Int[300+1,300+1]
x.Tile4 = New Int[300+1,300+1]
x.Tile5 = New Int[300+1,300+1]
x.Tile6 = New Int[300+1,300+1]
x.Tile7 = New Int[300+1,300+1]
x.Tile8 = New Int[300+1,300+1]
x.Entity = New Int[300+1,300+1]
x.Area = New Int[300+1,300+1]
WriteStdout("Aktueller Memory Wert im Taskmanager schaun...~n")
Delay 5000
WriteStdout("nun eine ganz normale Schleife :|~n") '<- Ab hier verbraucht es!
While Not False
Blah.Bam()
Delay 1
Wend

Macht man bei Build Threads an, verbraucht es massenhaft (ab und zu bleibts 2 sek. stehen und floodet wieder weiter). Mache ich jedoch bei build Threads aus, verbraucht es garnix. Wie kann das sein? Ich habe es unter Win7 und Windows Server 2003 getestet.

Was mir auch noch aufgefallen ist, sobald ich diese leere unnütz schleife Blah.Bam() wegmache, verbraucht es unter Threads nichts Oo

Ist das ein fehler von mir oder ein Fehler von bmax?

THX
MFG
Klin
 

Dreamora

BeitragFr, Feb 19, 2010 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab keinen leak gefunden, lediglich einen unterschied im Pooling verhalten.
Er geht am anfang rauf ein stück weit, bleibt dann aber konstant wie das bei managed environments so üblich is (um 2MB wenn ich das delay 1 rausnehm damits net ewig dauert Smile )


das liegt daran dass der threaded gc anders arbeitet als der normale. da kann man nicht viel dran machen (der normale is net im ansatz threadsafe noch async safe, denn kann man schon mit callbacks killen)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

klin

BeitragFr, Feb 19, 2010 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist nur, dass ich diese New ints ca. 50 fach benötige. Ohne Thread verbraucht es konstant beim start 15 K Bei Thread steigt und steigt es hoch bis zu 50 - 70 K o.o Bleibt aber danach tatsächlich konstant stehen.
Das ist schade, dass man nicht wirklich etwas dagegen tun kann.
Trotzdem Danke

THX
MFG
Klin

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group