我有一个 SQLite 数据库,我必须不断地从中检索数据。每次检索之间可能会对数据进行更改。
我的目标是最大限度地提高应用程序性能,那么最快的检索方法是什么?
我可以想象2:
不断打开和关闭新光标
首先查询所有数据,并将其存储在ArrayList中。更改数据时,使用
indexOf
更改 SQLite DB 和 ArrayList。---- 已编辑 ----
我需要数据在谷歌地图中创建标记。
我考虑过使用 CursorLoader,但由于我不需要与其他应用程序交互,所以我不想使用内容提供程序。
创建自定义加载程序是个好主意吗?
简而言之,虽然事情并不总是那么简单,但最快的方法就是一次性完成所有事情。
不断地对数据库进行调用确实会造成应用程序性能瓶颈,特别是当它是对服务器而不仅仅是设备的 SQLite 数据库时。
CursorAdapter
的内容,它处理数据库中行的显示,每次插入/更新一行时,CursorAdapter 都会相应地更新 ListView。它还处理打开/关闭/移动到下一个光标,使其非常可读且易于开发人员遵循。
然而,再次尝试用尽可能少的调用来完成任务。如果您坚持使用 ArrayList:
onPause()
这样的方法来执行此操作,因为它是最早可以杀死 Activity 的方法之一。CursorLoader
的完美用例。给定一个查询,它将使您的列表适配器保持最新的数据,假设您在数据库中发生更改时发出通知。它还可以方便地为您处理活动生命周期事件(即,活动完成时它将关闭光标,暂停时会停止更新等)。
最快的方法显然是根本不使用数据库。但是,这显然不是一个解决方案,除非您找到某种方法将您的阵列公开以从其他地方访问。
使用数据库是集中数据的一种便捷方式,因此许多用户可以访问数据并随时更新数据。不幸的是,这是最慢的选择。
在速度和可用性之间选择中间立场是一项艰巨的任务。您必须在陈旧数据和吞吐量之间找到平衡。
例如,如果您对 5 秒前有效的数据图片感到满意,那么您可能可以将数据本地缓存在数组中,并安排某种机制使其在后台运行时保持最新状态。场景。
如果 5 分钟的延迟可以接受,您可能可以安排定期推送到数据库。
此外,您使用的任何机制还必须处理数据的并行更改 - 也许两个用户同时更改相同的数据。
您只需要决定在哪里取得平衡即可。