【问题标题】:Android - Putting Cursor data in a HashMap to speed up data retrievalAndroid - 将光标数据放入 HashMap 以加快数据检索
【发布时间】:2016-09-07 03:33:28
【问题描述】:

我正在使用 Android 光标开发一个带有 sqlite 数据库的测验应用程序。现在用户可以在问题之间跳转。如果他转到下一个问题,我将调用 cursor.moveToNext(),否则调用 cursor.moveToPrevious。在每次“跳跃”时,我都会用数据库的数据(问题、答案、图片、类别)填充对象。现在我想创建一个测验对象,它包含所有必需的数据,并将其放入 HashMap 中。以光标位置为键、测验对象为值的 HashMap。所以我不必在每次跳转时都从数据库中读取数据。此外,它将避免多次创建对象。

有意义吗?

【问题讨论】:

  • 您应该以两种方式实现您的应用并测试您是否获得了性能提升。

标签: android hashmap android-sqlite android-cursor


【解决方案1】:

根据Common's WareCursor 将数据缓冲到内存中。这意味着您的应用程序不会直接从每个cursor.moveToNext() 上的数据库中读取。因此,我认为您不需要HashMap。另一方面,QuestionQuiz 类对于将数据传递给需要使用它的每个方法非常有帮助。

【讨论】:

  • 谢谢。我已经有一个问题、答案、图片和信息对象。我不喜欢的是我总是在每次跳跃时创建新对象。因此,我考虑将对象放入 HashMap 中。
  • @DenoAgüero 我不知道您是否在应用启动时立即在 HashMap 中创建所有对象。如果您还没有考虑过,更复杂的方法可以懒惰地创建对象。您可以通过检查HashMap 来执行此操作,如果该对象已经创建,那么如果没有,则创建它。
  • 这是我的问题。如果将我的对象存储在 HashMap 中是否有意义,或者在内存使用方面会不好。与我当前的解决方案(创建新对象)相比,这是更好的方法吗?
  • @DenoAgüero 在这种情况下,通常需要在内存使用和速度之间进行权衡。为了使您的应用程序更快、响应更快,您将不得不使用更多内存。但是,您可以通过使用延迟初始化在一定程度上减轻这种权衡。
  • @DenoAgüero 数据已经在数据库中“序列化”了,所以我看不出将其序列化为 HashMap 数据结构有什么明显的优势。
【解决方案2】:

光标不会在每次跳转时进行查询。它也是数据的容器,例如地图。从数据库中获取数据然后填充地图对我来说并不是一个优化的解决方案。我仍然喜欢在光标上工作并获取数据。

【讨论】:

  • 好的,但是你认为我总是在每次跳转时创建新对象是一个很好的解决方案吗?我对此并不满意。
  • 那就不要创建对象了,保存游标列索引,直接从游标查询数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2022-01-25
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多