在易失性内存之外存储 objects/variables

Storing objects/variables outside of volatile memory

概览

我没有太多编程经验,但我正在使用 Cordova 开发混合移动应用程序。此应用程序将拥有大量静态(未更改)数据。其中一些数据大约每分钟会被引用一次,根据该引用完成一些简单的操作,这将决定在循环的下一次迭代中引用哪个对象。

据我所知,对象或变量是内存中使用名称标识的保留 space。在硬件方面,它是易失性存储或 RAM 的同义词。因为我将使用移动设备,所以我担心我预计将使用的大量对象(比如接近 10,000 个)会很快耗尽设备内存。

我最初的想法是将这个静态数据集合存储在本地存储中,而不是在代码本身中声明这些对象。然后我会在循环的每次迭代需要时引用该文件以获取数据,该循环每分钟处理一次。我没有使用 JSON 的经验,但据我所知,这似乎是一个不错的选择。

故障

• 我正在使用 typescript 和 Cordova。

• 我可能会处理成千上万个静态对象。

• 这些对象都将使用少数接口之一作为轮廓。

• 这些对象中的一些将被引用以获取大约每分钟一次的信息。

• 该信息将用于执行非常简单的操作。

• 可能需要永久保存所引用对象的 ID 以备将来使用。

• 这些操作将决定在下一次迭代中需要引用哪些对象。

问题(S)

所以,我的问题是这样的。我对对象存储方式的理解是否正确?如果是这样,这个对象数量是否足以使移动设备的 RAM 达到最大?我的想法是将所有静态信息存储在类似 JSON 的文件中,然后根据需要引用该文件中的各个对象是否合理?

不太正确。现代操作系统并不总是将应用程序的内存映射到硬件 RAM。

假设您有一个 phone,总 RAM 仅为 256MB,但您的应用程序最终将 128MB 的数据加载到内存中。这是否意味着您只能再使用一个可以加载 128MB 内存的应用程序? OS 本身使用内存怎么样?答案是,OS 会将一些数据从主内存(例如 RAM)移动到辅助存储(例如固态硬盘),为您的应用程序和其他应用程序腾出空间来完成它们的工作需要。如果再次需要移出 RAM 的数据,OS 可以将其从 SSD 移回 RAM。这称为 paging,它是构成操作系统内存管理的众多不同部分之一。其中大部分是在您的应用程序代码无需注意的情况下完成的。

当然,即使 OS 在为您的应用程序提供内存方面做得非常出色,您仍然希望编写内存高效的代码。特别是在手机上 phones.

对于您的具体示例,您建议将静态数据存储在本地存储中是一个好的开始。但它也有一些缺点,您应该注意;以及一些你应该回答的问题。

  • 你能不能把数据分开,这样你就可以一次只加载你需要的部分?或者您是否需要全部加载?
  • 您能否将数据存储在更压缩的数据结构中? (参见示例 Tries
  • 您从本地存储加载数据的频率如何?
  • 从本地存储加载数据是否会花费太长时间(例如,如果您的循环执行一千次迭代,并且在每次迭代期间从磁盘加载大量静态数据,它最终可能会非常慢)。

祝你好运!