Оптимизация Android SQLite, добавляющая строки

#android #sqlite

#Android #sqlite

Вопрос:

Я добавляю около 3000 строк в базу данных SQLite, и это занимает около 8 секунд. Как я могу это оптимизировать.

Ответ №1:

Если вы еще этого не сделали, завершите всю операцию транзакцией. Ваш код должен выглядеть примерно так:

 db.beginTransaction();
try {
    // insert your data here
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}
  

Комментарии:

1. Хороший совет. Я добавил транзакцию вокруг одного из моих методов медленного сохранения, и это улучшило ее в 10 раз. «PRAGMA synchronous = OFF» увеличила его только в 2 раза.

Ответ №2:

Попробуйте выполнить PRAGMA synchronous = OFF перед выполнением обновлений.

Комментарии:

1. Я также видел, как кто-то упоминал, что при компиляции SQLite перекомпилировался sqlite с определением SQLITE_NO_SYNC и значительно увеличилась скорость. Любые комментарии. osdir.com/ml/sqlite-users/2010-08/msg00630.html

2. Перекомпиляция SQLite не приведет к изменению программного обеспечения, работающего на телефоне, поэтому я бы не пошел по этому пути. Я полагаю, что как только у вас появится объект SQLiteDatabase, просто вызовите execSQL метод с этим оператором в качестве аргумента, прежде чем выполнять вставки. Я не пробовал, но согласно этому , это должно иметь существенное значение.

3. @TedHopp На самом деле, вы можете запустить свою собственную версию SQLite. Я думаю, что это то, на что ссылался barcodereader. Я запускаю зашифрованную версию Sqlite на Android и iOS для клиентов с конфиденциальными данными (это сторонняя реализация, доступная любому).

4. @Генри — Это интересно. Не могли бы вы воспользоваться какой-либо встроенной поддержкой базы данных, предоставляемой в Android API, или вам пришлось полностью обойти это. Кроме того, можете ли вы поделиться, чью зашифрованную реализацию вы используете?

5. @TedHopp Я использую sqlcipher, доступный по sqlcipher.net . Существует коммерческая версия и бесплатная версия для сообщества под лицензией с открытым исходным кодом в стиле BSD.