将对象/变量存储在易失性存储器之外

时间:2017-07-12 20:17:50

标签: json cordova typescript mobile storage

概览

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

根据我的理解,对象或变量的全部内容是使用名称标识的内存中的保留空间。其中硬件术语是易失性存储或RAM的同义词。因为我将使用移动设备,所以我担心我预测的大量对象(比如接近10,000)将会非常快地将设备内存最大化。

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

BREAKDOWN

•我正在使用打字稿和Cordova。

•我可能会使用数以万计的静态对象。

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

•每分钟一次的某些信息会引用其中一些对象。

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

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

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

问题(S)

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

  • 您可以将数据分开,以便一次只能加载所需的部分吗?或者你是否需要加载所有它?
  • 您可以将数据存储在更加压缩的数据结构中吗? (参见例如Tries
  • 您从本地存储加载数据的频率是多少?
  • 从本地存储加载数据会花费太长时间(例如,如果你的循环进行了一千次迭代,并且在每次迭代期间从磁盘加载大量静态数据,它可能最终会非常慢)。
祝你好运!