我有一个使用sqlite数据库将有关电影的数据呈现给用户的应用程序。数据库中的每个电影记录基本上都包含字符串和整数。

每次重新创建活动时,都会在数据库中查询必要的“电影”。

我的问题如下:

如果我在启动应用程序时创建LruCache以避免每次都查询数据库,性能会有所改善吗?会“重要”吗?

尽管LruCache可以缓存任何内容,但我认为它主要对位图缓存有用,因为位图会占用大量内存。在其他情况下,它可以显着提高性能吗?

抱歉,您的无知,但我真的很想知道此工具的用途。

谢谢!

最佳答案

LRUCache仅在您仅需要缓存一定数量的内容时才真正有用-例如,使用位图时,您经常创建固定大小的缓存,因此仅缓存100MB的图像,其他所有操作都会失败。这可以避免OOM问题(请注意,LRUCache并不神奇,您仍然必须对应用进行编码以正确使用它才能获得此优势)。这样做的代价是您将在需要之前预先分配大部分/所有缓存。

如果您使用的总内存不是10s-100s MB,那么最好只使用Map。它更快,更容易。

至于LRUCache或Map vs Sqlite,是的,它将更快。如果您有一个反模式,例如查询数据库中列表中的每个getView,则应避免这种情况。但是,如果您要先查询发送内容,然后将其保存在应用程序中的其他位置,则针对诸如新活动/片段之类的主要事情再次重复查询的代价不高。还要记住,LRUCache不是持久性的,下次启动应用程序时,需要从头开始重新创建它。如果您需要跟踪更改或试图最小化服务器查询,则最好使用本地数据库。

10-07 19:58