Kokujou
Lieutenant
- Registriert
- Dez. 2017
- Beiträge
- 948
Ja, Hallo erstmal!
Ich hab ein großes Memory Leak in meinem Programm und ich hab es bereits gefunden. Die Frage ist, wie behebe ich es denn überhaupt?
Mein Setup:
Ich habe ein Spiel. Dieses Spiel erstellt einen Zustandsbaum, der vermutlich das Memory-Leak darstellt. Er rechnet vermutlich 100.000 zustände pro Spielzug aus und verursacht damit natürlich viel Speicher.
Nun wird das Spiel automatisiert - KI gegen KI. Ich lasse 100 Spiele in einem Parallel.For laufen. Und natürlich wird in jedem dieser Spiele in jeder Runde ein neuer Zustandsbaum aufgebaut.
Wie/Wann/Wo ich diesen Zustandsbaum aufbaue wird sich nicht ändern. Und der Speicher-Verbrauch pro Spiel hält sich in Grenzen. Allerdings scheint der Speicher nach jedem Spiel nicht aufgeräumt zu werden.
Meine Theorie: Je nach ANzahl der Kerne laufen X Threads gleichzeitig. Und die brauchen natürlich auch alle diese Resourcen. Also ver x-facht sich theoretisch mein Speicherverbrauch. Auch das ist bekannt. nun hab ich 16GB arbeitsspeicher, die dürften eigentlich nichtmal ansatzweise voll werden.
Zum Vergleich: Eine Runde verbraucht bestenfalls 300-400MB. Folglich dürften 12 Kerne 4GB verbrauchen. Mein Verbrauch liegt bald bei über 10GB Arbeitsspeicehr und das auch nur weil ab da bei meinem Speicher langsam schluss ist und es nicht weiter geht.
Irgendwas scheint da nicht ganz zu funktionieren. Wie funktioniert denn dieser Parallel.For? Startet der etwa einfach mal 100 Threads die sich alle nicht leeren und pseudoparallel laufen?
PS: Es wird um die Programmiersprache C# gehen, tut mir leid dass ich das nicht erwähnt habe.
Ich hab ein großes Memory Leak in meinem Programm und ich hab es bereits gefunden. Die Frage ist, wie behebe ich es denn überhaupt?
Mein Setup:
Ich habe ein Spiel. Dieses Spiel erstellt einen Zustandsbaum, der vermutlich das Memory-Leak darstellt. Er rechnet vermutlich 100.000 zustände pro Spielzug aus und verursacht damit natürlich viel Speicher.
Nun wird das Spiel automatisiert - KI gegen KI. Ich lasse 100 Spiele in einem Parallel.For laufen. Und natürlich wird in jedem dieser Spiele in jeder Runde ein neuer Zustandsbaum aufgebaut.
Wie/Wann/Wo ich diesen Zustandsbaum aufbaue wird sich nicht ändern. Und der Speicher-Verbrauch pro Spiel hält sich in Grenzen. Allerdings scheint der Speicher nach jedem Spiel nicht aufgeräumt zu werden.
Meine Theorie: Je nach ANzahl der Kerne laufen X Threads gleichzeitig. Und die brauchen natürlich auch alle diese Resourcen. Also ver x-facht sich theoretisch mein Speicherverbrauch. Auch das ist bekannt. nun hab ich 16GB arbeitsspeicher, die dürften eigentlich nichtmal ansatzweise voll werden.
Zum Vergleich: Eine Runde verbraucht bestenfalls 300-400MB. Folglich dürften 12 Kerne 4GB verbrauchen. Mein Verbrauch liegt bald bei über 10GB Arbeitsspeicehr und das auch nur weil ab da bei meinem Speicher langsam schluss ist und es nicht weiter geht.
Irgendwas scheint da nicht ganz zu funktionieren. Wie funktioniert denn dieser Parallel.For? Startet der etwa einfach mal 100 Threads die sich alle nicht leeren und pseudoparallel laufen?
PS: Es wird um die Programmiersprache C# gehen, tut mir leid dass ich das nicht erwähnt habe.
Zuletzt bearbeitet: