2013-06-10 6 views
5

Was ist der schnellste Weg, um 10.000 Zeilen aus einer SQLite-Datenbank in den Speicher zu laden? Jede Zeile enthält 1 Text und 4 Ganzzahlen. Derzeit mache ich das:Was ist der schnellste Weg, 10000 Zeilen aus der SQLite-Datenbank zu laden?

while(!cursor.isAfterLast()) { 
    cursor.copyStringToBuffer(column_index_1, buffer); 
    cursor.copyStringToBuffer(column_index_2, buffer); 
    cursor.copyStringToBuffer(column_index_3, buffer); 
    cursor.copyStringToBuffer(column_index_4, buffer); 
    cursor.copyStringToBuffer(column_index_5, buffer); 
    cursor.moveToNext(); 
} 

Der obige Code dauert etwa 750 ms auf Galaxy Nexus. Bei älteren Geräten könnte es einige Male langsamer sein. Kann ich es schneller machen?

(An dieser Stelle tippen Sie wahrscheinlich etwas wie "Warum müssen Sie die Zeilen in den Speicher laden?" Es ist ein bisschen kompliziert, aber ich kann versuchen, zu erklären, wenn jemand interessiert ist. Edit: Hier ist die Erklärung: https://gist.github.com/fhucho/af355d56ae3145e3e30f)

+2

Ich habe Interesse finden können! Bitte erkläre. :) –

+0

@KenWolf ok, ich poste einen Link zur Erklärung nach ein paar Minuten :) – fhucho

+0

Wenn alle Spalten einer Zeile in den gleichen Puffer kopiert werden, kann es einen Versuch wert sein, eine SQL-Anweisung wie "select col1 || col2 || ... "sqlite die Verkettung durchführen lassen. Dies kann oder kann nicht schneller sein. –

Antwort

2

Zuerst rate ich Ihnen, nur die ersten 1000 Zeilen zu laden, und dann AsyncTask verwenden, um mehr zu laden.

Sie Antwort hier http://www.javasrilankansupport.com/2012/11/asynctask-android-example-asynctask-in.html

Hope this Hilfe

+1

Nun, * alle * der Zeilen sollten asynchron geladen werden. Es ist nicht so, als wären die ersten 1.000 Zeilen frei. :-) – CommonsWare

+0

Ich mache es fast sicher asynchron, aber das würde die Tatsache nicht ändern, dass es langsam wäre :) – fhucho

Verwandte Themen