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