Ich arbeite an einem Projekt, bei dem Bitmaps auf einer Tabelle gespeichert werden müssen. Diese Bitmaps werden in Datenadaptern verwendet, um in Listen angezeigt zu werden. Diese Tabelle kann möglicherweise mehr als 1000 Bilder enthalten. Der Grund, warum ich momentan nicht in der Datei speichere, ist, wie schnell ich Bilder in db lesen und schreiben kann.
Was ich im Wesentlichen suche, ist, die Einschränkungen des SQLite-Cursors zu verstehen. Wie wird der Cursor in den Speicher geladen? Stellt es die Abfrageergebnisse in den Speicher oder erstellt es eine Art von Lese- / Schreib-Temp-Datei? Ich möchte nicht auf Probleme stoßen, bei denen das Abfragen großer Datenmengen dazu führt, dass auf einem Gerät nicht genügend Arbeitsspeicher zur Verfügung steht.
Das ist ein alter Post, den ich gemacht habe. Meine Lösung bestand darin, Bilder in einer Datei zu speichern und den Pfad zum Bild in der Datenbanktabelle zu speichern. Das war sauberer und schien viel schneller.
Die Idee, große Binärdaten in einer Tabelle zu speichern, scheint nicht die richtige Lösung zu sein. Ich habe keine detaillierten Informationen darüber, warum das keine gute Idee ist, aber genau so fühle ich mich durch ein bisschen Forschung.
Wenn ich mich erinnere, wird es jedoch viele Ergebnisse behalten, die im Speicher zwischengespeichert werden können. Es sollte normalerweise unter dem Soft-Heap-Limit bleiben. Es ist ein Advisory-Limit, daher wird es vorgezogen, das Limit zu überschreiten, als SQL_NOMEM zurückzugeben.
Ich glaube nicht, dass es für irgendwelche Cache-Mechanismen auf die Festplatte schreibt. Solange jedes Bild in den Speicher passen kann und sie nicht in den Indizes enthalten sind, sollte dies kein Problem darstellen.
Ich bin kein Android-Programmierer, für das, was es wert ist. Einige dieser Dinge könnten angepasst worden sein.
Als Hintergrund ist sqlite_step der Cursor in der Standardbibliothek. Mir ist nicht bewusst, ob Android seine eigenen Mechanismen implementiert hat. Sie können einige allgemeine Informationen auf ihrer Seite über dynamische Speicherzuweisung finden.