CoreData批量导入大量数据时,关系关联引发的内存占用与保存耗时矛盾问题求助
CoreData批量导入大量数据时,关系关联引发的内存占用与保存耗时矛盾问题求助
各位大佬好,想请教个CoreData批量导入的棘手问题:
我现在有个CoreData模型,包含两个实体EntityA和EntityB——EntityA和EntityB是一对多的关系,反过来EntityB到EntityA是一对一的反向关系。
最近在做一个从外部文本文件导入数据的功能,这个文件特别大,导入后会生成几十万甚至上百万条记录。结果我发现,每完成一次导入迭代,内存占用就会往上跳一截。后来搞清楚了,这是CoreData处理关系的机制导致的。
如果我不设置这两个实体间的关系,内存就能控制住,但业务上我必须保留这个关系。
后来我试了用下面这段代码来让对象故障化(fault),以此释放内存:
context.refresh(newRelatedObjectInEntityB, mergeChanges: false)
这方法确实管用,但有个问题——执行这段代码前必须先调用context.save(),不然对象会丢失。可每次save都特别费时间,我之前本来是做批量save来提升效率的。
现在就陷入了两难:要么保留关系但内存疯涨,要么频繁save控制内存但导入速度慢得离谱。有没有什么办法能兼顾内存控制和导入效率呀?
备注:内容来源于stack exchange,提问作者Mitch Cohen
相关产品推荐
相关产品推荐

