android - 确保审计表不影响应用程序使用的 RAM

标签 android sqlite memory-management audit-tables

我尽量简化了我的情况,所以它看起来不太真实,抱歉。但这是基于一个真正的担忧。

假设我有一个向用户显示当前温度的小型 Android 应用程序。温度每秒都在变化,应用程序一直在工作。

该应用程序还有一个“审计”数据库表:

CREATE TABLE TemperatureAudit (
secondsFrom1970 INTEGER not null,
temperature INTEGER not null);

此应用程序运行一年后,审计表将非常大。让我们想象一下,如果不是真的有必要,我不想截断它。

所以对于那些了解 sqlite 如何在 Android 上工作的人来说,问题是:我应该担心吗?

  1. 当我不使用它时,sqlite 会尝试在 RAM 中加载这个大表吗?例如,当我从不同的表中进行选择时。
  2. 如果我尝试“从 TemperatureAudit 中选择温度 > 0 的计数”,sqlite 会一个接一个地加载这个大表吗?还是将整个表一次性加载到 RAM 中?
  3. 如果 sqlite 对内存分配不太吝啬,我该怎么办?将此表移动到另一个数据库是否有助于解决第一个问题?表分区对第二个有帮助吗?

最佳答案

SQLite 加载所有表的元数据,但不加载任何不需要的实际数据。

所有对数据库的访问都是通过页面完成的,页面大小只有几KB;当前未使用的任何页面都不需要在内存中。因此,扫描表格需要的内存非常少。

关于android - 确保审计表不影响应用程序使用的 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44168041/

相关文章:

java - Java GC 是否会释放数组的 null 元素?

c - realloc() 在 Windows 7 中成功,但在 Windows XP 中失败,为什么?

android - 对象字段更改的 LiveData 更新

c# - 为什么我无法将 sqlite 文件上传到 OneDrive?

java - 用于 Android 开发的 IntelliJ IDEA IDE

ios - SQLite 错误 : too many terms in compound SELECT

SQLite sqlite3_step() 因大数据库而挂起

ios - 为什么会有 "potential leak"?

android - OkHttp3 hostnameVerifier 由 : javax.net.ssl.SSLException : Read error: ssl=0xc8cf1fc8: I/O error during system call, 对等方重置连接引起

java - 设置 Activity/fragment 中的工具栏