перемещение курсора Android - первая проблема с производительностью - PullRequest
3 голосов
/ 05 августа 2011

Я пытаюсь оптимизировать свое приложение.Я заметил, что метод cursor.movetofirst () как-то замедляет производительность моего кода.

Cursor cursor = myDbHelper.getDayInfo(new SimpleDateFormat("yyyy-MM-dd").format(myCalendar.getTime());

над строкой выполняется в 10 мс в эмуляторе 2.1 и1008 *

if(cursor != null && cursor.moveToFirst()) 

эта строка заняла около 1,6 секунды .Я сделал небольшой поиск по этому поводу.Некоторые говорят, что сделайте это в другом потоке или в asynctask, но это сделает код более сложным.Я просто пытаюсь понять, что на самом деле происходит с этим курсором.Может кто-нибудь упростить или дать подсказку о повышении производительности базы данных, связанной с моим вопросом?

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Прошло много времени с тех пор, как это было отмечено как отвеченное, но вы никогда не получили здесь хорошего ответа Даже для очень большой таблицы запрос одной строки обычно занимает намного меньше, чем 1,6 секунды. Причиной этого является то, что у вас нет индекса для столбца (столбцов), к которому вы запрашиваете, поэтому он должен просмотреть всю таблицу, чтобы найти эти значения. Если вы создаете индекс, вы можете сократить время до доли секунды.

0 голосов
/ 05 августа 2011

Если набор данных, удерживаемый курсором, большой, перемещение курсора занимает время. Вы должны выполнять такие ресурсоемкие операции в отдельном потоке. Использование AsyncTask может сделать ваш код немного сложным, но оно того стоит. Это против пользовательского потока, блокируемого за счет испорченного пользовательского интерфейса.

0 голосов
/ 05 августа 2011

Естественно, что метод moveToFirst () получает гораздо больше времени, чем другой код. На самом деле происходит сбор данных, который вызывает обмен данными с базой данных, чтение данных и так далее. Вы на самом деле не можете ничего с этим поделать. Совет был верным - перенести все длинные операции на AsyncTask .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...