2012-04-29 104 views
9

我正在開發一個需要在桌面上存儲位圖的項目。這些位圖用於數據適配器以顯示在列表中。該表格可能包含超過1000個圖像。我目前沒有存儲到文件的原因是因爲我可以以多快的速度讀取和寫入圖像到數據庫。SQLite遊標如何在內部工作?

我基本上在尋找的是理解SQLite光標的侷限性。遊標如何加載到內存中?它將查詢結果放在內存中還是創建某種類型的臨時讀/寫文件?我不想遇到查詢大型數據集導致設備內存不足的問題。

+0

有[CursorWindow](http://developer.android.com/reference/android/database/CursorWindow.html),它似乎只用於加載查詢的部分內容,無論何時moveToXyz。數據應該直接來自數據庫。 – zapl

+0

「我正在開發一個需要在桌面上存儲位圖的項目。」 - ick。 「這張表格可能包含1000多張圖片。」 - 更多ick。 「我目前沒有存儲到文件的原因是因爲我可以以多快的速度讀取和寫入圖像到數據庫。」 - 根據定義,文件將會更快或更快,因爲SQLite必須將其文件存儲在文件中。 – CommonsWare

+0

zapl感謝那些信息。 @CommonsWare不知道什麼ick意味着:P我認爲它看起來應該快或更快從文件讀取比數據庫。除了如何使用它們,我不太瞭解遊標......但是SQLite不會高度優化您從數據中讀取的方式嗎?我的意思是多次讀取文件中的圖像數據似乎比從光標讀取文件要慢很多。 – Jona

回答

0

這是我做過的一箇舊帖子。我的解決方案是將圖像保存到文件並將路徑保存到數據庫表中。這是更清潔,似乎更快。

將大型二進制數據保存到表中似乎不是正確的做法。我沒有詳細的信息來說明爲什麼不是一個好主意,但這只是我從一點研究中感受到的。

1

如果我記得,它會保持很多結果緩存在內存中。它通常應該低於soft heap limit。這是一個諮詢限制,所以它會優先超過返回SQL_NOMEM的限制。

我不相信它寫入任何緩存機制的磁盤。只要每張圖片都適合內存,並且它們不在索引中,這應該不是問題。

我不是一個android程序員,它是值得的。其中一些東西可能已經定製。

作爲背景,sqlite_step是默認庫中的遊標。我不知道android是否已經實現了它自己的機制。您可以在他們的頁面上找到有關dynamic memory allocation的一些常規信息。