2011-12-23 12 views
21

Es SQLite cursor.getCount() operación cara cuando se ejecuta en dispositivo Android?Es SQLite cursor.getCount operación costosa en Android

que es más rápido:

Cursor cursor = db.rawQuery(sql, null); 
int length = cursor.getCount(); 
final List<Item> items = new ArrayList<Item>(length * 2); // need maybe 2 items per row 

if (cursor.moveToFirst()) { 

     // loop trough the query result 
     do { 
... 

o

Cursor cursor = db.rawQuery(sql, null); 
final List<Item> items = new ArrayList<Item>(); // capacity is 0 by default on android 

if (cursor.moveToFirst()) { 

     // loop trough the query result 
     do { 
+0

No creo que haya una diferencia significativa en el rendimiento, a menos que hable de una cantidad/tamaño considerable de elementos. De lo contrario, creo que su pregunta ofrece algún tema para discutir como: ¿es mejor asignar la memoria por adelantado en su teléfono para obtener rendimiento ... – hovanessyan

+1

No creo que haya una diferencia en el rendimiento. 'cursor.moveToFirst()' llama a 'onMove' que llama a' getCount'. Entonces getCount puede ser muy lento, pero realmente no puedes escapar de él. – Malabarba

Respuesta

13

Si se compara el tiempo necesario para que ambos ejemplos de código para ejecutar, se dará cuenta de que es lo mismo, porque Cursor.moveToFirst() cual pueda eventualmente llamando SQLiteCursor.getCount()

+0

Esto es correcto, probé ambas muestras de código en una base de datos grande con una consulta que tarda 30 segundos en completarse y el tiempo era el mismo. – peceps

+0

Creo que Ionut Negru ha respondido su pregunta :) –