【发布时间】:2013-02-15 19:17:36
【问题描述】:
我构建了我的第一个 Android 应用程序。我有一组要显示的列表。我想知道手机内存很小,每次都为我的列表访问数据库还是将其保存在内存中是更好的设计方法吗?
我确实需要经常重新排序列表,因此只需按排序顺序从数据库中抓取它们就可以非常快。
【问题讨论】:
标签: android sql database performance
我构建了我的第一个 Android 应用程序。我有一组要显示的列表。我想知道手机内存很小,每次都为我的列表访问数据库还是将其保存在内存中是更好的设计方法吗?
我确实需要经常重新排序列表,因此只需按排序顺序从数据库中抓取它们就可以非常快。
【问题讨论】:
标签: android sql database performance
内存中的列表使用 RAM,频繁的 DB 查询使用 CPU 并导致 I/O 延迟。在移动设备上,您必须平衡所有这些以使您的代码具有响应性,同时节省电池并且对 RAM 和 CPU 的影响最小。
为您的代码设置合理的限制并尝试在其中工作。确定最大内存限制和最小响应时间。
只要您有空闲的 RAM,就将数据保留在内存中,当您超过 RAM 限制(分页)时,开始将该数据的部分读/写到磁盘 DB。您只会在极少数情况下需要它,因为大多数现代移动设备都有合理的 RAM 来满足它们提供的应用程序的平均需求。
一个典型的例子是显示一百万个项目的列表,您在 RAM 中保留大约 1000 个,并按需从 DB 加载下一个/上一个 1000。
当您的应用不再存在时,请确保将重要数据持久保存到数据库中。
【讨论】:
我们不知道您的列表的内容,但通常您不会侵犯您的设备或应用程序的内存限制,除非您处理的是图形。
推论为简单数据类型的文本数据和结构不会耗尽设备的“有限内存”,当然除非它们真的很大。
无论如何,我的答案是记住它。只保留您需要的数据。
【讨论】:
数据库只能用于存储电源循环之间或应用程序之间的非设置信息。你不应该将它们用于可以放入内存的东西,因为它会更慢并且需要大量额外的编程。
如果您需要处理大量列表并有一种很好的方法将它们组织成表格并在 SQL 中检索它们,我可能会发现使用数据库将数据保存在持久内存中很有用。
编辑:
您可能还需要考虑访问数据的频率。您不想不断地查询数据库。
【讨论】: