Ускорение записи в базу данных - PullRequest
3 голосов
/ 01 июля 2011

У меня есть ListActivity, которое использует CursorAdapter для отображения некоторых данных. Эти данные являются результатом вызова веб-службы.

Я получаю ответ от вызова веб-службы, использую библиотеку org.json. * Для его анализа, а затем записываю результаты в базу данных SQLite3 приложения. Затем запрашивается курсор ListActivity, и данные отображаются в списке.

Моя проблема в том, что запись в базу данных слишком медленная. Единственное, что я могу подумать, это не использовать CursorAdapter и просто хранить эти данные в памяти. Я надеялся, что у кого-то есть другое предложение ускорить процесс. Может быть, какая-то насыпная вставка какого-нибудь вида?

Следует отметить, что для вставки я использую ContentProvider. Поэтому я вызываю getContentResolver (). Insert (...).

Вот несколько раз из теста, который извлек 56 строк данных по локальной сети и отобразил их:

Время ответа: 178 мс

Время для анализа JSON: 16 мс

Время записи 56 строк в базу данных: 5714мс

В конечном итоге я бы хотел, чтобы время записи базы данных было меньше 1000 мс для этого объема данных.

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Однажды у меня возникла некоторая проблема, и я обнаружил, что сначала вызывается метод beginTransaction () в вашей базе данных, а затем выполняются ваши запросы вставки. Пример кода:

    public void insertClassBatch(ArrayList<Class> batch) throws Exception
{
    this.getWritableDatabase().beginTransaction();
    for (Class c : batch)
    {
        this.insertClassStatement.bindString(1, c.getClassName());
        this.insertClassStatement.bindString(2, c.getClassValue());
        this.insertClassStatement.executeInsert();
    }
    this.getWritableDatabase().setTransactionSuccessful();
    this.getWritableDatabase().endTransaction();
}

это уменьшило вставку 100 строк (размер пакета в этой ситуации) с 30 до 300 мс или около того.

0 голосов
/ 01 июля 2011

Делаете ли вы в оба конца каждую строку, которую вы записываете в базу данных, или вы можете объединить их все в одну и ту же поездку? Могу поспорить, что задержка сети является виновником, если вы не пакетируете.

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