German Cursor window allocation of 2048 kb failed

hogiebaer

Active Member
Licensed User
Longtime User
Schönen Guten Abend,

hab schon wieder eine Frage.

Meine App beklagt sich regelmässig mit der Fehlermeldung

"android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed # Open Cursors=576(#cursors opened by this proc=576)"

Mich verwundert das sehr, da ich doch den Cursor innerhalb einer SUB dimensioniere. Und ich dachte,
wenn die SUB beendet ist, dass diese Variablen, die innerhalb der SUB dimensioniert sind, automatisch vom System gelöscht werden ?! Bei Delphi ist das jedenfalls so innnerhalb der procedures.
Muss ich bei B4A alle Variablen, die ich dimensioniere in der SUB, vor dem Verlassen "closen"???
Oder ist der Cursor eine Ausnahme ??




Danke für eure Hilfe
Gruss Holger
 
Last edited:

KMatle

Expert
Licensed User
Longtime User
Kommt darauf an (grundsätzlich: ja, aber... zumindest bei Objekten/Variablen). Die Datenbank ist aber "da" und grundsätzlich gilt: Immer alles sauber beenden. Cursor öffnen und direkt danach wieder schließen. Ist auch sauberer. Gilt für alle Ressourcen, die man öffnet.
 

hogiebaer

Active Member
Licensed User
Longtime User
Dem möchte ich natürlich zustimmen, aber so ganz verstehe ich es trotzdem nicht, wie java oder b4a hier arbeitet.

Wenn ich am Sub Anfang DIM CS AS CURSOR setze und am Ende CS.CLOSE, sollte dieser Anforderung doch Genüge getan sein, oder ?
In der Sub verwende ich nämlich mehrmals Befehle wie
CS=DB.EXECQUERY() und arbeite damit. Es sollte doch dann immer dieselbe Instanz von CS sein, die ich oben dimensioniert habe, aber scheinbar baut er immer eine neue auf. Funktionieren tut es aber ohne Probleme, wenn ich VOR dem CS=DB.EXECQUERY() den DIM setze und direkt nach Bearbeitung des Cursors wieder "close". Sollte er tatsächlich immer eine neue Instanz aufbauen, stellt sich mir natürlich die Frage, warum er nicht meckert während der Ausführung, dass diese Instanz nicht dimensioniert bzw. initialisiert ist !?

Sehr komisch.
 
Top