我維護一個正在收集大量信息的應用程序,並將這些信息存儲在ArrayList中。爲什麼寫入內存中的SQLITE數據庫比使用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項需要〜3mins!當寫入數據庫時只需寫入ArrayList
即可。 在內存中創建數據庫並沒有太大的區別。
由於我在SQLITE方面的經驗相當有限,所以我開始通過android.database.sqlite.SQLiteDatabase.insert
方法創建條目。
由於基於文件和內存數據庫之間沒有任何意義的區別,我猜想使用BEGIN TRANSACTION
和COMMIT TRANSACTION
不會有什麼區別。
有什麼方法可以優化這種行爲嗎?
該應用程序正在讀取sdcard(或外部存儲)的內容,並正在創建一個清晰的用戶友好視圖。 我有很多想法來進一步改進這個應用程序,但是對於這個基於數據庫的方法來說更加靈活和容易處理。但只要「成本」(就收集數據而言的時間而言)與看起來似乎一樣高,我就無法這樣做...... –
與我的高分系統一樣的用例。我將高分數據作爲JSON存儲在存儲上,並將它們顯示在花哨列表中進行一些過濾/排序。列表模型的數據作爲對象存儲在數組列表和內存中。如果你有很多條目,並且堆內存將會成爲問題,那麼SQLite遊標查詢可能是丟失模型的更好選擇 –