[Monkey] Speicherverbrauch richtig messen. App läuft langsam

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Speicherverbrauch richtig messen. App läuft langsam voll

BeitragSo, Jun 04, 2017 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag,

ich brauch mal Hilfe. Ich versuche gerade meine App speichertechnisch zu optimieren.
um das möglichst schnell machen zu können dache ich ich kompiliere einfach nach Desktop Target und schau mir im Taskmanager den Speicherverbrauch an.

Nun bekomme ich da aber Werte die mehr Fragezeichen aufwerfen als Fragen beantworten:
Beim Start werden 54MB besetzt.. ca. 3 Minuten lang steigt der Wert langsam auf 69MB(es wird nichts gedrückt und nur in einer Loop einige Bilder angezeigt). Dann Bleibt der Wert einige Minuten stabil. Drücke ich irgendwas in der App an, dann fängt der Speicher wieder das wachsen an... Die Gui Elemente wurden aber alle schon im Hintergrund geladen und erstellt. Nach ungefähr 20 Minuten bin ich dann irgendwo bei 96 MB Verbrauch.

Ich hab absolut keine Ahnung was da immer mehr Speicher frisst.. wäre es ein Fehler in einer Schleife oder ähnlichen müsste es ja konstant ansteigen, aber es sind immer wieder längere Pausen dazwischen. Gebe ich Ressourcen frei wird der Speicherverbrauch kein KB kleiner..

Code kann ich nicht Posten da das Projekt bereits viel zu umfangreich ist.
Was für ein Bauchgefühl bekommt Ihr wenn Ihr das obige liest ?

Vielen Dank im Vorraus!

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
  • Zuletzt bearbeitet von Dottakopf am Mo, Jun 12, 2017 12:18, insgesamt einmal bearbeitet

Thunder

BeitragMo, Jun 05, 2017 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann dir jetzt keine exakte Antwort geben, weil ich mich nie mit Monkey beschäftigt habe.
Aber das klingt sehr nach Garbage Collection.
Da wird immer mehr Speicher als nötig angefordert, die Speicherverwaltung wie du sie siehst (New und Ressourcen-Freigabe) findet wahrscheinlich im Userspace statt, davon bekommt das Betriebssystem gar nichts mit, außer der GC hat gerade nicht genug Speicher für neue Objekte.
Alten Speicher gibt der GC auch nicht freiwillig frei, weil er ihn dann ja später wieder neu anfordern müsste.

Dein Speicherverbrauch könnte aber auf dem Mobile Target völlig anders aussehen, weil in der Android Runtime der GC schon eingebaut ist und sich so das Betriebssystem besser um bereits freigegebenen Speicher kümmern kann.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Dottakopf

BeitragMi, Jun 07, 2017 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ja soetwas ähnliches hatte ich schon vermutet, aber für mich ist das alles so eine undurchsichtige Sache..
Ich hatte mich daher an den Support gewendet und das als antwort erhalten

Zitat:

When you use flush it will be removed from the content manager. But if one of your objects like a sprite or anything is using it it will stay in memory until you ‘destroy’ your object or remove the use of it by setting that object to null or it’s variable that points to it to null. This is how the monkey gc is working.


For example:
Global image:=iContent.GetImage("g01Back10.png")
iContent.Flush("g01Back10.png") ‘ image is removed from the content manager but still in memory
image=null ‘ At some point the gc will clean it from memory.


Das das Objekt noch zusätzlich auf Null gesetzt werden muss wird in der Dokumentation garnicht erwähnt..
Die Befehle sind aus "ignition x" für Monkey und beziehen sich auf das interne Content System. (Ihr werdet diese also standardmäßig nicht finden)

Nun ich schmeiße lediglich den ImagePointer auf das Objekt auf Null , und Flush es aus dem ContentSystem, somit sollte keine Verbindung zwischen dem Gui Objekt und dem Bild bestehen und es durch die GC entfernt werden.

Gut das du das mit Android angesprochen hast, gerade hier macht mir das ja so große Kopfzerbrechen.. gerade auf älteren Geräten ist Speicher echt knapp..


Vielen Dank!

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Farbfinsternis

BeitragDo, Jun 08, 2017 7:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Lies Dich mal in das Thema "Object Pooling" ein. Monkey kommt ordentlich ins Schleudern wenn Du zur Laufzeit neue Objekte erzeugst.
Farbfinsternis.tv

Dottakopf

BeitragMo, Jun 12, 2017 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Hinweis !
"Ignition X" das ich für Monkey nutze hat sogar ein Object Pooling System.
Werde ich vielleicht gleich von Anfang an einbauen, mal sehen wie das Handling und performance ist.


Wie würde sich das "Schleudern" bemerkbar machen ?
bei meinem Lern Projekt Road Jump erstelle ich ja zur Laufzeit wirklich massig Objekte, habe aber auf HTML5 und verschiedenen Android nie etwas verrücktes gemerkt.

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Farbfinsternis

BeitragMo, Jun 12, 2017 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Dottakopf hat Folgendes geschrieben:
[...]Wie würde sich das "Schleudern" bemerkbar machen ?[...]

Der Garbage Collector wird nicht hinterher kommen und Dir wird der Speicher voll laufen ... auch auf Android.
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group