【问题标题】:Storing objects/variables outside of volatile memory在易失性存储器之外存储对象/变量
【发布时间】:2017-07-12 20:17:49
【问题描述】:

概览

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

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

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

故障

• 我正在使用 typescript 和 Cordova。

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

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

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

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

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

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

问题

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

【问题讨论】:

    标签: json cordova typescript mobile storage


    【解决方案1】:

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

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

    当然,即使操作系统在为您的应用程序提供内存方面做得非常出色,您仍然希望编写仍然具有内存效率的代码。特别是在手机上。

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

    • 您能否划分数据以便一次只加载您需要的部分?还是您需要全部加载?
    • 能否将数据存储在更压缩的数据结构中? (例如参见Tries
    • 您多久会从本地存储加载数据?
    • 从本地存储加载数据会花费太长时间(例如,如果您的循环执行一千次迭代,并且在每次迭代期间从磁盘加载大量静态数据,最终可能会非常慢)。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2014-09-26
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多