2011-12-23 3 views
21

Is SQLite cursor.getCount() дорогостоящая операция при исполнении на Android устройство?SQLite cursor.getCount дорогая операция в Android

Что быстрее:

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 { 
... 

или

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

Я не думаю, что есть существенная разница в производительности, если вы не говорите о значительном количестве/размере элементов. В противном случае, я думаю, ваш вопрос предлагает некоторые темы для обсуждения: лучше ли выделять память заранее на вашем телефоне, чтобы получить производительность ... – hovanessyan

+1

Я не думаю, что когда-либо была разница в производительности. 'cursor.moveToFirst()' вызывает 'onMove', который вызывает' getCount'. Таким образом, getCount может быть очень медленным, но вы не можете избежать этого. – Malabarba

ответ

13

Если сравнить время, необходимое для обоих образцов кода для выполнения, вы заметите, это то же самое, потому что Cursor.moveToFirst() в конечном счете, вызывая SQLiteCursor.getCount()

+0

Это правильно, я тестировал оба примера кода на большом db с запросом, который занимает 30 секунд, и время было таким же. – peceps

+0

Я думаю, Ionut Negru ответил на ваш вопрос :) –

Смежные вопросы