Hoher Arbeitsspeicher lt. Taskmanager?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: Hoher Arbeitsspeicher lt. Taskmanager?

BeitragDo, Feb 04, 2016 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich schonwieder: Ich setze momentan ein Projekt um und habe da eine Frage: Für Debugzwecke lasse ich mir via GCMemAlloced() den allokierten RAM-Speicher anzeigen. Das sieht auch ganz gut aus, er pendelt sich bei einem Wert ungefähr ein und bleibt dann auch da (laut Return des Befehls). Nun habe ich mal beim Laufenlassen meines Programms den Taskmanager gestartet und siehe da: Dort wird der allokierte Arbeitsspeicher stetig mehr (ich nehme an, dass der Taskmanager im Reiter "Prozesse" in der Spalte "Arbeitsspeicher (privater Arbeitssatz)" den allokierten Speicher des Prozesses anzeigt?). Die Frage ist: Warum ist das so? Ich habe schon versucht dem entgegenzuwirken durch den Aufruf von GCCollect(), jedoch allokiert mein Programm immer weiter. Ich habe mal geguckt, was passiert, wenn ich das Programm einen längeren Zeitraum laufen lasse, war dann aber irgendwann im Taskmanager bei einem Wert von 1.000.000 K (wofür auch immer "Kelvin" in diesem Zusammenhang stehen soll Very Happy ) und habe den Test abgebrochen.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Tankbuster

BeitragFr, Feb 05, 2016 3:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicher, dass du nicht irgendwo einen Memory Leak drin hast?

Ansonsten:
Ich habe mal ein bisschen gesucht, und festgestellt, dass wohl einige User Probleme mit Ihrem Task-Mgr aufgrund eines tollen Features haben.

http://www.winfuture-forum.de/...pic=164571
http://forum.chip.de/windows-7...56375.html
Twitter
Download Jewel Snake!
Windows|Android
 

CO2

ehemals "SirMO"

BeitragFr, Feb 05, 2016 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die Antwort.

Habe meine Spracheinstellungen kontrolliert und das Dezimaltrennzeichen sowie das Tausendergruppierungszeichen sind unterschiedlich. Also habe ich offensichtlich doch ein Memory-Leak in meinem Code und es liegt nicht an Windows (Schade Very Happy)...

Was mich aber interessieren würde: Warum gibt mir GCMemAlloced einen konstanten Wert zurück, obwohl das nicht korrekt ist?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Thunder

BeitragSa, Feb 06, 2016 1:24
Antworten mit Zitat
Benutzer-Profile anzeigen
GCMemAlloced gibt dir nur Infos über den Speicher, den der Garbage Collector verwaltet, also Instanzen von Klassen, Arrays, Strings ... (steht btw auch in der BlitzMax Hilfe). Normalerweise ist das mehr, als was man gerade tatsächlich verwendet, da sich der GC den Speicher behält auch wenn Objekte gelöscht werden, damit er beim nächsten Allozieren keinen system call machen muss.

Das heißt, das Memory Leak passiert bei Speicher der nicht vom GC gemanaget wird. Der z.B. über MemAlloc (brl.blitz) oder malloc_ (pub.stdc) angefordert wird und vermutlich auch bei Banks (die geben zwar ihren Speicher im Finalizer frei, aber wer weiß wann der aufgerufen wird :/ )

Es ist ja immer sinnvoll zu versuchen, den Fehler mit wenig Beispielcode zu reproduzieren. Wenn dir das gelingt, teile ihn bitte mit uns. Es kann ja auch an einem Modul liegen, das du importierst.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group