Мне нужно проанализировать довольно большой файл XML (варьирующийся от ста до нескольких сотен килобайт), что я делаю с помощью Xml # parse (String, ContentHandler)
. В настоящее время я тестирую это с помощью файла размером 152 КБ.
Во время синтаксического анализа я также вставляю данные в базу данных SQLite, используя вызовы, подобные следующим: getWritableDatabase (). Insert (TABLE_NAME, "_id", values)
. Все это вместе занимает около 80 секунд для тестового файла 152 КБ (что сводится к вставке примерно 200 строк).
Когда я закомментирую все операторы вставки (но оставлю во всем остальном, например, при создании ContentValues
] и т. д.) тот же файл занимает всего 23 секунды.
Это нормально для операций базы данных, чтобы иметь такие большие издержки? Могу ли я что-нибудь с этим сделать?
Вы должны выполнять пакетную вставку.
Псевдокод:
db.beginTransaction();
for (entry : listOfEntries) {
db.insert(entry);
}
db.setTransactionSuccessful();
db.endTransaction();
Это чрезвычайно увеличило скорость вставки в моих приложениях.
Обновление:
@Yuku предоставил очень интересную запись в блоге: Android использует inserthelper для более быстрой вставки в базу данных sqlite
Если в таблице есть индекс, подумайте о том, чтобы удалить его перед вставкой записей, а затем добавить обратно после того, как вы зафиксировали свои записи.