Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
NTUI frist ca.500Kb Speicher pro Start !
#1
Ich denke ich bin auf einen schweren Fehler gestoßen, jedes NTUI Programm belegt mindestens ca. 500KByte Speicher das es nach beenden nicht mehr frei
gibt. Als Beispiel seien hier Blackbirds NTUIExamples genannt, bei AIDE sind es jedesmal sogar ca. 5MByte die verloren gehen Cry
Zitieren
#2
Ich schau mal nach Leaks. Beim ersten Start ist das normal, da einige Fonts und andere Systemresourcen geladen werden die das OS weiter im Speicher hlt für das nächste mal. Beim zweiten Start sollte das aber nicht mehr passieren.
Zitieren
#3
Fang bei der ab3support.library an die frisst ca 1kByte wenn man nur öffnen pft_create{4096,0} pft_free{} und direkt wieder schließt. Wo bei die Speicher menge proportional mit der Größe von pft_create{} wächst!

Zu NTUI selbst da hast du teilweise auch vergessen beim Freigeben (deinit) den Speicher der Struktur selbst freizugeben.
Dann tuiGlobal\xmlCallMAP wird nicht freigegeben mit pft_free{}, Deletepool für engine\notifyPool fehlt und wenn ich es richtig gesehen habe fehlt ein FreeVec_ für *listView\ListP beim Deinit, sowie die Verkleinerung des belegten Speichers wenn ein Item entfernt wird.
Zitieren
#4
sehr gut rechergiert Thomas !

Aber mal anders gefragt, wenn du schon weist woran es hapert, warum behebst du es nicht gleich ?
Das könnte Thilo entlasten und uns alle vorwärts bringen Big Grin
Zitieren
#5
Blackbird schrieb:Aber mal anders gefragt, wenn du schon weist woran es hapert, warum behebst du es nicht gleich ?

Na ich bin mir halt nicht sicher ob ich da bei NTUI richtig liege, ob vergessen oder Absicht da es noch wo anders gebraucht wird. Habe ich den (richtigen) Überblick bzw die Vision davon :?: Wink
Zitieren
#6
Ok, kann ich verstehen, ging mir damals mit den Änderungen von error message ask auch so Big Grin

Man weis nie ob das auch gewollt ist, und wenn nicht, woanders was beeinflussen kann...
Zitieren
#7
Ein Deinit() gibt die Struct nicht frei. Sonst wäre es ein Delete() (C++) oder Destroy() (allgemeiner OOP Terminus).
Genauso wie ein Init() keinen Speicher allokiert, sondern die vorhandene Struct initialisiert. Sonst wäre es ein New() bzw. Create().

Deinit : de-initialisiert eine Struct
Init : initialisiert eine Struct
Free : gibt den Speicher einer Struct frei
Alloc : allociert den Speicher für eine Struct
New/Create: Alloc + Init
Delete/Destroy: Deinit + Free

Habe mich aber selbst nicht konsequent dran gehalten. Evtl. sollte ich das ändern. Fehlt mir nur die Zeit...

Aber danke für die Analyse. Was tatäschlich ein Fehler ist werde ich beheben.
Zitieren
#8
gibts denn hier einen Vortschritt zu vermelden ?
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 7 Gast/Gäste