gpt4 book ai didi

ios - CoreData导入重载内存

转载 作者:行者123 更新时间:2023-11-28 13:13:40 25 4
gpt4 key购买 nike

我有一些主数据,是JSON文件,需要用CoreData导入。事务点是所有master正常插入的时候。但是,内存的使用量在提交之前一直在增加。提交前由于内存过载导致应用程序崩溃。

我正在考虑以下两种解决方案。

  1. 使用SQLite的功能,如将数据保存到临时文件。 (不知道有没有这个功能。)

  2. 使用两个数据库文件。一个用于操作,另一个用于临时。如果导入正常,则从temporal替换为operation DB。

但仍然不确定。在这种情况下有人知道任何解决方案吗?谢谢。

更新 1:

So you're importing into an empty data store, or you're adding to existing data that you need to revert to on failure?

在我的例子中,这是下面的过程。

  1. 删除现有数据。 (所有表)

  2. 正在导入一个空数据。

  3. 主数据完成后,提交。如果发生错误,回滚事务。删除导入回溯,确保主数据之间的一致性。

Also, why do much data on a mobile device?

我客户的需求。

更新2:

我尝试禁用 undoManager 但结果并没有受到太大影响。我不需要“撤消”,但我需要回滚。在这种情况下,setUndoManager 可用...?

[[self managedObjectContext] setUndoManager:nil] ;

最佳答案

CoreData 非常耗内存。

它的上下文(暂存器)存储在内存中。

如果您可以使用 2 个 db 文件,请将新数据存储在一个新文件中并定期保存和刷新(例如每 1000 条记录,具体取决于您的记录大小)以保持您的内存消耗可接受。如果导入时出错,只需关闭并删除新的数据库文件即可。

您还可以通过向您的记录添加一个字段来处理初始数据库文件,该字段可以是 "validated": boolean"timestamp": date。新记录的验证文件为假。如果遇到错误,请删除所有未“验证”的记录(或按日期删除所有“时间戳”在导入开始日期之后的记录)。

但是,在第二种解决方案中,您不需要一次删除所有记录,因为如果您请求获取所有“validated”为假的记录,则所有新记录都将在暂存器中实例化(就是这样CoreData 有效),这将再次消耗大量内存。

关于ios - CoreData导入重载内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com