概述
我没有太多编程经验,但我正在使用 Cordova 开发混合移动应用程序。此应用程序将具有大量静态(不变(数据。其中一些数据大约每分钟引用一次,根据该引用完成一些简单的操作,这将确定在循环的下一次迭代中将引用哪个对象。
根据我的理解,对象或变量是内存中使用名称标识的保留空间。在硬件术语中,这是易失性存储或RAM的同义词。因为我将使用移动设备,所以我担心我预测我将使用的大量对象(例如接近 10,000 个(会很快耗尽设备内存。
我最初的想法是将此静态数据集合存储在本地存储中,而不是在代码本身中声明这些对象。然后,我会在循环的每次迭代中在需要时引用该文件以获取数据,该循环每分钟处理一次。我没有 JSON 的经验,但据我所知,这似乎是一个不错的选择。
故障
• 我正在使用打字稿和科尔多瓦。
• 我可能会处理数千个静态对象中的 10 个。
• 这些对象都将使用几个接口之一作为大纲。
• 大约每分钟引用一次其中一些对象以获取一些信息。
• 该信息将用于执行非常简单的操作。
• 引用对象的 ID 可能需要永久保存以备将来使用。
• 这些操作将确定在下一次迭代中需要引用哪些对象。
问题 (S(
所以,我的问题是这个。 我对对象存储方式的理解是否正确?如果是这样,这个数量的对象是否足以最大化移动设备的 RAM?我的想法是将所有静态信息存储在类似 JSON 文件的东西中,然后根据需要引用该文件中的各个对象是否合理?
不太正确。 现代操作系统并不总是将应用程序的内存映射到硬件 RAM。
假设您的手机只有 256MB 的总 RAM,但您的应用程序最终将 128MB 的数据加载到内存中。 这是否意味着您只能再使用一个可以加载 128MB 内存的应用程序? 使用内存的操作系统本身呢?答案是,操作系统会将一些数据从主内存(例如RAM(移动到辅助存储(例如固态驱动器(中,为您的应用程序和其他应用程序腾出空间,以便根据需要完成工作。 如果再次需要从 RAM 移出的数据,操作系统可以将其从 SSD 移回 RAM。这称为分页,它是构成操作系统内存管理的众多不同部分之一。 其中大部分是在应用程序代码不必意识到的情况下完成的。
当然,即使操作系统在为应用程序提供内存方面做得很好,您仍然希望编写仍然具有内存效率的代码。特别是在手机上。
对于您的特定示例,您建议将静态数据存储在本地存储中是一个良好的开端。但它也有一些缺点,你应该知道;以及您应该回答的一些问题。
- 您能否划分数据,以便一次只能加载所需的部分? 还是无论如何都需要加载所有内容?
- 是否可以将数据存储在更压缩的数据结构中?(参见示例尝试(
- 从本地存储加载数据的频率如何? 从
- 本地存储加载数据会花费太长时间(例如,如果您的循环进行了一千次迭代,并且在每次迭代期间从磁盘加载大量静态数据,则最终可能会非常慢(。
祝你好运!