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

![]() |
DottakopfBetreff: Speicherverbrauch richtig messen. App läuft langsam voll |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lies Dich mal in das Thema "Object Pooling" ein. Monkey kommt ordentlich ins Schleudern wenn Du zur Laufzeit neue Objekte erzeugst. | ||
Farbfinsternis.tv |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group