【问题标题】:Android: Load database to memory vs queries over timeAndroid:随着时间的推移将数据库加载到内存与查询
【发布时间】:2014-05-19 08:39:36
【问题描述】:

我正在开发一个需要元数据信息来填充一些数组的程序。假设我有“Countries”、“Districts”和一堆其他元数据之类的信息。该信息存储在 sqlite 数据库中。该程序有时需要加载所有国家并对其进行迭代以搜索一个。我的问题是:最好的方法是什么:在查询元数据后将元数据保存在一个数组中,或者每次我需要它们时我都应该查询数据库

以下是一些更多信息,以便您评估性能: 元数据表(如国家):~10 我需要迭代元数据的估计时间:几个(~100) 数组包含 aprox。 5 个字段(原始类型)。

【问题讨论】:

  • 如果之间的数据发生变化怎么办?如果您将数据保存在内存中(一种非常强调内存的方式),您总是会显示旧数据
  • 数据为元数据信息。这意味着它将从 web 服务加载并且永远不会更改,至少在程序运行时是这样
  • 那么,您确定没有人在您的查询之间更改服务器上的数据吗?然后你可以将数据保存在内存中(或者最好将它们复制到本地数据库临时表中,这样你就可以一次又一次地查询它们)
  • 为什么要将它们复制到本地数据库?数据已经存储在 sqlite 数据库中。它在用户第一次打开应用程序时填充。每次我想搜索一个国家/地区时我应该继续查询它还是应该将它保存到一个数组中并迭代它。查询操作比数组迭代压力大吗?
  • 您说数据是从 WebService 获取的。所以不在本地数据库上。将数据保存在数组中会更快。但是内存效率低。您可能会遇到一些 OutOfMemory 异常。当应用程序处于后台时,Android 将擦除内存。所以,你不能指望它。

标签: android arrays performance sqlite


【解决方案1】:
  1. 如果数据量太大以至于影响到您的其他数据或其他应用程序可用的数据量,您应该将其保存在数据库中并动态访问它。
  2. 如果数据量很小,而且查询的频率很高,那么将其保存在内存中会更有效。
  3. 如果数据量很小,并且查询的频率不高,那么您所做的事情不会有任何明显的不同。

您的特殊情况是这三种情况之一,但找出答案的唯一方法是自己衡量性能。

【讨论】:

  • 您对“影响可用数据量的数据”的定义是什么?
  • 我说的是“数据量”。您会注意到您的或其他一些应用程序内存不足并提前换出。
  • 我喜欢你的回答。如果数据的数量是可变的,您认为衡量数据量然后继续进行是否是个好主意?
猜你喜欢
  • 2011-03-07
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2013-08-30
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多