LockImage() verursacht Memory-Leaks?
Übersicht

CO2ehemals "SirMO"Betreff: LockImage() verursacht Memory-Leaks? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich bin auf ein Problem gestoßen: Ich möchte in einer Schleife ein Bild locken, sodass ich es verändern kann. Am Ende der Schleife unlocke ich es wieder. Folgender Simpler Test-Code BlitzMax: [AUSKLAPPEN] Graphics(800, 600) führt zu einem starken Anstieg des Wertes "Arbeitsspeicher (privater Arbeitssatz)", welcher im Taskmanager unter "Prozesse" zu finden ist. schon nach kurzer Zeit überschreitet der Wert bei mir die 200.000 K (wofür auch immer das steht, schätzungweise Kilobyte (nicht Kelvin ![]() Ist das bei euch auch so? Wenn ja, kann man dagegen was tun? |
||
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 |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo CO2
Bei mir steigt der Wert auch kontinuierlich bis über 200'000 K an, springt aber jeweils kurz danach wieder runter auf ~15 K. Das wiederholt sich ständig. Wird vermutlich einfach damit zu tun haben, dass der Garbage Collector bei 60 FPS nicht ganz mitmacht und aus Perfomance-Gründen nur arbeitet, wenn es sich auch wirklich lohnt ![]() Du kannst ihn übrigens mit GCCollect() manuell aufrufen. Mit einem GCCollect() in der Schleife bleibt bei mir der Arbeitsspeicher konstant um die 15 K. MfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mhm, habe das ausprobiert (auch mit pixmap = Null), hatte jedoch keine Auswirkungen. Was etwas gebracht hat, war die Nutzung von Framework. Folgender Code erzeugt keine Memory-Leaks BlitzMax: [AUSKLAPPEN] Framework BRL.GLMax2D Übrigens: Wenn ich DrawImage rausnehme, wird gar kein Speicher mehr allokiert (außer dem, der für das Bild selbst gebraucht wird). EDIT: Übrigens, wenn man den Direct3D-Treiber nimmt, wird weniger Speicher benötigt, als wenn man den Glut-Treiber nimmt BlitzMax: [AUSKLAPPEN] Framework BRL.D3D7Max2D |
||
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 |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kommt es bei dir wirklich zum Memory-Leak oder beobachtest du ein Verhalten ähnlich zu dem, was ich oben beschrieb?
Beide Codes von dir bewirken bei mir wieder mehr oder weniger das gleiche. Also die GL-Variante genau das gleiche, mit D3D geht's einiges langsamer und es springt auch schneller wieder auf einen tiefen Wert. Ich glaube mal irgendwo aufgefasst zu haben, dass OpenGL dynamische Bilder aus irgend einem Grund doppelt im Speicher hält. Das würde den Unterschied wohl schon erklären. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also, ich habe es mal getestet und es ist tatsächlich so, dass ohne die Einschränkung auf ein Framework der Wert im Task-Manager auf über 1.000.000 K ansteigt. Viel weiter habe ich es noch nicht laufen lassen... Mit Angabe des Frameworks sind die Piks bei GL bei ~65.000 K, bei D3D bei ~25.000 K - Es kommt zu der bekannten Sägezahnkurve. Scheint also etwas anderes zu sein. | ||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group