У меня есть приложение, которое собирает много информации и хранит эту информацию в ArrayList.
Подробно этот ArrayList определен как ArrayList<FileInformation>
, который имеет некоторый член, такой как:
private File mFile;
private Long mSize;
private int mCount;
private Long mFilteredSize;
private int mFilteredCount;
private int mNumberOfFilters;
и т.д.
Этот подход работает, но не очень гибок, когда я хотел бы представить некоторые новые функциональные возможности. Он также имеет некоторые ограничения с точки зрения использования памяти и масштабируемости. Из-за этого я провел несколько тестов, если база данных - лучший подход. От гибкости нет сомнений, но почему-то я не могу заставить ее работать достаточно быстро, чтобы стать реальной альтернативой.
Сейчас в базе данных есть только одна таблица, подобная этой:
CREATE TABLE ExtContent (
"path" TEXT not null,
"folderpath" TEXT not null,
"filename" TEXT,
"extention" TEXT,
"size" NUMERIC,
"filedate" NUMERIC,
"isfolder" INTEGER not null,
"firstfound" NUMERIC not null,
"lastfound" NUMERIC not null,
"filtered" INTEGER not null
);
Проблема производительности огромна. Сбор и запись ~ 14000 предметов занимает ~ 3 минуты ! при записи в базу данных и просто 4-5secs , если записано в ArrayList
.
Создание базы данных в памяти не имеет большого значения.
Поскольку мой опыт работы с SQLITE довольно ограничен, я начал с создания записей с помощью метода android.database.sqlite.SQLiteDatabase.insert
.
Поскольку не было значимой разницы между файловой базой и базой данных в памяти, я думаю, использование BEGIN TRANSACTION
и COMMIT TRANSACTION
не будет иметь никакого значения.
Есть ли способ оптимизировать это поведение?