我正在开发Objective-c中的一个项目,我需要处理存储在NSDictionary
中的大量数据(在ram中最多约2个演出)。在我对其进行的所有计算之后,似乎在需要时保存/加载数据会更快(而不是重新解析原始文件)。
所以我开始考虑保存大量数据。我已尝试使用NSKeyedUnarchiver
和[NSDictionary writeToFile:atomically:]
,但两者都因malloc错误而失败(无法分配____字节)。
我环顾四周,Apple的Dev论坛和谷歌,但无法找到任何东西。我想知道是否可以一点一点地创建文件而不是一次性更好,但我无论如何都无法添加到现有文件中。我不是完全反对用一堆小文件保存,但我宁愿使用一个大文件。
谢谢!
编辑包含更多信息:我不确定NSDictionary
给我带来了多少开销,因为我没有从文本文件中获取所有信息。我有一个1.5 gig的文件(其中我保留~1 / 2),结果是大约900 megs到1 gig in ram。我最终需要添加一些更多的数据,但它将构建为已经加载到内存中的内容 - 它不应该加倍大小,但它可能会接近。
数据全部是串行的,可以在存储中分开,但需要全部存储在内存中才能执行。我目前有整数/字符串对,最终会以字符串/字符串对结束(所有值也是不同字符串集的键,因此最终存储要求将与我目前的字符串相同,加上一堆参考文献)。
最后,我需要将约300万个字符串与其他一些字符串相关联。但是,唯一重要的是这些字符串之间的关系 - 我可以哈希所有字符串,但NSNumber
(因为NSDictionary
需要对象)可能会给我带来同样多的开销。
答案 0 :(得分:0)
如果可以,以64位模式重建应用程序将为您提供更大的堆空间。
如果这不适合您,您需要创建自己的数据结构并定义自己的加载/保存例程,这些例程不会分配太多内存。
答案 1 :(得分:0)
NSDictionary不会为您提供您正在寻找的可扩展存储,至少不是为了持久性。您应该实现自己的数据结构/序列化过程。
您是否考虑过使用嵌入式sqllite数据库?然后您可以处理数据,但可能一次只加载数据结构的片段。