2016-09-12 57 views
0

我有一個應用程序使用sqlite數據庫向用戶顯示有關電影的數據。數據庫中的每個電影記錄基本上都包含字符串和整數。Android中的LruCache是​​否會讓您對sqlite有顯着的性能差異?

每次重新創建活動時,都會查詢數據庫是否有必要的「電影」。

我的問題是:

如果我要創建時,應用程序啓動,以避免每次查詢數據庫中的LruCache,會有一個性能改進?它會「重要」嗎?

雖然LruCache可以緩存任何東西,但我認爲它主要用於位圖緩存,因爲位圖的內存密集程度相當高。有沒有其他情況可以提供顯着的性能改善?

對不起,我真的很想知道這個工具的用途。

謝謝!

+0

取決於您的查詢的複雜性... – njzk2

回答

1

LRUCaches只在需要緩存一定數量的東西時纔有用 - 例如,通過位圖您經常創建一個固定大小的緩存,因此您只緩存100MB的圖像,其他所有內容都會失敗。這可以讓你避免OOM問題(請注意LRUCache不是神奇的,你仍然必須編寫你的應用程序正確使用它來獲得這種優勢)。它的成本是,您將在需要之前預先分配大部分/全部緩存。

如果您使用的內存總量不是10s-100s的MB,那麼最好使用Map來代替。它更快,更容易。

至於LRUCache或Map vs Sqlite-是的,它會更快。如果你有一個反模式,比如查詢列表中每個getView的數據庫,你應該避免這種情況。但是,如果您事先查詢了eveything,然後將其保存在應用程序中的其他地方,那麼重新查詢主要內容(如新的活動/片段)不會導致高成本。另外請記住,LRUCache不是永久性的 - 下次啓動應用程序時,需要從頭開始重新創建。如果您需要跟蹤更改或試圖最小化服務器查詢,本地數據庫可能會更好。

+0

偉大的答案,真的很有啓發性。還有一件事,如果你不介意的話:這個應用程序有一個搜索功能,用戶插入一個查詢,然後我做一個API調用來檢查有多少電影匹配查詢(並將它們下載爲json)。在這個具體的例子中,緩存是否值得?如果是這樣,什麼樣的緩存。謝謝。 –

+0

緩存對於非鍵值查詢沒有幫助。如果您想搜索以A開頭的所有電影的標題,則緩存將無法應答。你需要對緩存中的所有查詢進行線性化,這可能實際上比數據庫慢。 (有些技術可以用來改進它,但是到了極致,你基本上會在你的應用程序中寫入一個數據庫)。如果你需要關係查詢,你最好只使用數據庫。 –

相關問題