我正在将大量数据加载到具有后台NSManagedObjectContext
的后台线程上的核心数据中。我经常在保存后重置此背景上下文,以便从内存中清除对象图。操作完成后,还会释放上下文。
问题是,无论我做什么,Core Data都拒绝发布存储为外部引用的大块数据。我已经在Allocations
仪器中验证了这一点。应用重启后,内存占用量将保持极低,因为这些外部引用仅在用户访问时无故障。我需要能够在初始下载和导入后从内存中删除这些BLOBS
,因为它们集体占用了太多空间。平均而言,它们只是html,因此大多数都是less than 1MB
。
我已经尝试refreshObject:mergeChanges:
几乎所有内容都将标志设置为 NO。我什至也尝试重置我的主要NSManagedObjectContext
。我有很多autorelease pools
,没有内存泄漏,也没有启用僵尸。最初创建外部基准时,如何减少核心数据存储占用空间?
我已经查看了Apple的所有文档,找不到有关外部BLOB生命周期的任何信息。我还在这个网站上搜索了许多类似的问题,但没有解决方案: 核心数据导入 - 不释放内存
应用程序首次重新启动后一切正常,但我也需要第一次运行稳定。还有其他人能够成功地对核心数据进行NSData BLOBS
故障吗?
我假设"从内存中清除"意味着"导致对象被解除分配"而不是"将地址空间返回给系统"。 前者在您的控制之下。 后者不是。
如果可以在分配工具中看到分配,您是否打开了参考计数事件的跟踪并平衡了保留和释放? 应该有一个指示性的额外保留(或更多)。
如果你能提供一个简单的示例项目,就会更容易弄清楚发生了什么。