CoreData导入内存过载

时间:2014-02-24 18:42:14

标签: ios iphone objective-c core-data magicalrecord

之前我曾问过similar question,但我认为已经改变为一个新问题。

我正在使用MagicalRecord的MR_importFromArray方法导入大量数据。它在NSOperationQueue的后台运行,maxConcurrentOperationCount设置为1。我从文件中批量导入500个。

我有一个gist包含我的所有代码,但基本上我是在file上循环,其中包含多达500个对象。然后我import them and save them使用MR_importFromArray

    NSArray *array = [NSClassFromString(name) MR_importFromArray:cleanedResources inContext:moc];
    [moc MR_saveToPersistentStoreAndWait];
    [moc reset];

我有一切保存和正确关联。但是我的记忆力可以迅速增加到100多MB,并且通常会完全崩溃应用程序。我怎样才能确保导入过程没有使用太多内存,并在完成后将其释放。

每次导入后,我都会在reset上调用NSManagedObjectContext,但这似乎根本不会影响它。当我使用Instruments查看我的应用程序的内存/分配使用时,它表示MR_importFromArray是所有内存负载来自的地方。 Leaks工具也找不到任何东西。

来自分配工具:

allocations tool http://f.cl.ly/items/2l3v2X0w2n3e1v1J0Z0V/Screen%20Shot%202014-02-24%20at%2011.19.37%20AM.png

来自XCode(刚收到内存警告后):

memory inside XCode http://f.cl.ly/items/0m3F1T33171E39240C1r/Screen%20Shot%202014-02-24%20at%2011.34.13%20AM.png

我不确定为什么Allocations只说10MB是Live而XCode说100MB(我还在学习如何正确使用Allocations)。

我认为通过重置上下文,这将释放与该上下文相关的所有内存。

我有很多工作进入该操作队列,但就像我说的那样,一次只运行一个,所以我认为当它们完成时它们将完全从内存中删除。但我并没有在分配工具中看到这种类型的图表。

是什么导致内存堆积而不被释放,我该如何解决?

更新

如果这将是有用的,那么来自分配工具的呼叫树(指向MR_importFromArray呼叫的箭头:

call tree http://f.cl.ly/items/3R0b1k2s2u1E1F0o0f3N/Screen_Shot_2014-02-24_at_1_28_32_PM-10.png

要回答Tom的问题,我打开的文件只是JSON转换为NSDictionary,然后保存到文件中。当我在本地保存JSON文件时,它们大约是200 KB。同样,没有二进制属性只是字符串,数字,日期。

0 个答案:

没有答案