Проблема с производительностью SimpleCursorAdapter в Android - PullRequest
0 голосов
/ 08 июня 2011

Я пытаюсь показать ListView, заполненный SimpleCursorAdapter.SimpleCursorAdapter получает курсор, заполненный выполнением rawQuery, например:

SELECT DISTINCT s.cod AS _id, s.name AS name FROM supplier s
   INNER JOIN product p ON p.supplier = s.cod
   INNER JOIN productprice pp ON pp.product = p.cod
WHERE
   pp.category = 'w'
ORDER BY s.name

Когда я выполняю этот запрос непосредственно в базе, он возвращает 40 строк менее чем за 0,1 сек (обычно).Выполнение rawQuery в хранилище тоже очень быстро.Проблема в том, когда я делаю myListView.setAdapter(simpleCursorAdapter);.Это займет более 2 минут!Итак, я изменил запрос на SELECT cod AS _id, name FROM supplier ORDER BY name, и выполнение setAdapter было довольно быстрым («обычные быстрые» hshs).

Мои вопросы: существует лимит JOIN, который я могу сделать вrawQuery для заполнения listView?Я делаю что-то неправильно?Должен ли я использовать query () в хранилище вместо rawQuery ()?

Извините за английский и заранее спасибо.

1 Ответ

3 голосов
/ 08 июня 2011

Курсор, который вы предоставляете SimpleCursorAdapter, является набором результатов из запроса к базе данных.Если запрос к базе данных быстрый, то проблема находится в CursorAdapter.Я обнаружил, что у CursorAdapters низкая производительность (как при использовании SimpleCursorAdapter, так и пользовательских адаптеров, расширяющих CursorAdapter или ResourceAdapter).В итоге я получил данные из курсора, поместил их в массив и расширил ArrayAdapter, что дало мне гораздо лучшую производительность.

...