我在 iPhone 平台上的 Objective-C 中有一个对象图,我希望在关闭应用程序时保持闪烁。该图有大约 100k-200k 个对象并包含许多循环(按设计)。我需要能够尽快读/写这张图。
到目前为止,我已经尝试过使用 NSCoder。这不仅与循环作斗争,而且还需要时间和大量内存来保存图形——可能是因为在幕后使用了 XML 文档。我还使用了 SQLite 数据库,但单步执行那么多行也需要大量时间。
我考虑过使用 Core-Data,但担心我会遇到与 SQLite 或 NSCoder 相同的问题,因为我相信 core-data 的后备存储将以相同的方式工作。
那么有没有其他方法可以以轻量级方式处理此对象图的持久性 - 理想情况下我喜欢 Java 的序列化?我一直在考虑尝试 Tokyo Cabinet或者将一堆 C 结构占用的内存写入磁盘 - 但这将是大量的重写工作。
最佳答案
我建议重写为 C 结构。我知道这会很痛苦,但它不仅可以快速写入磁盘,而且性能应该会好得多。
在有人不高兴之前,我并不是说人们应该总是使用结构,但在某些情况下,这实际上对性能更好。特别是如果您一次在 20k 连续 block 中预分配内存(使用指向 block 的指针),而不是在重复循环中创建/分配大量小块。
也就是说,如果您的循环不断地分配对象,那将会减慢它的速度。如果您预先分配了 1000 个结构并且只有一个指针数组(或单个指针),那么这会快很多。
(我遇到过这样的情况,即使是我的桌面 mac 也太慢,没有足够的内存来处理连续创建的数百万个对象)
关于iphone - 将对象图持久化以在 iPhone 上闪烁的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1292845/