gpt4 book ai didi

ios - ios中如何用核心数据提高大数据导入性能

转载 作者:IT王子 更新时间:2023-10-29 06:21:19 25 4
gpt4 key购买 nike

在首次启动 iOS 应用程序时,我从网络服务导入了大约 18,000 条相互关联的各种实体的记录。这些记录在网络上的数据库中具有自己的唯一标识符。我反复阅读了 apple 的文档、cimgf 的博客条目、Marcus Zarra 的核心数据书籍,并一遍又一遍地观看了 iDeveloper TV 的核心数据系列。如果不将实体 B、C 和 D 保留在内存中或执行昂贵的提取并维护实体之间的关系,我想不出一种导入实体 A 的方法。如果我不使用核心数据,我将能够只使用已经建立的唯一标识符,并且导入速度会快得多。

如果您有任何建议,我会洗耳恭听。

我们已在 Android 中实现此策略,导入时间约为 2.5 分钟,而在不同设备上的硬件相当的 iOS 上,导入时间约为 6 分钟。缩短导入时间对我们的用户来说至关重要,因此我无法在这个问题上妥协。预先感谢您的帮助。

编辑:

这是我目前的做法 - 我创建了一个 NSOperation,它创建了自己的上下文。我首先导入实体 B、C 和 D,并为每个实体类型保留一个数组。然后我导入实体 A 并使用谓词过滤实体 B、C 和 D 的数组,以便将实体 A 与 B、C 和 D 中的适当实体相关联。我以优化的时间间隔批量保存上下文根据我当前导入的实体类型而有所不同。

我不只是导入一个表,我正在导入许多彼此相关的表。因此,如果我导入实体 B,我必须要么将实体 B 保留在内存中,要么在需要它时获取它以将实体 B 与实体 A 相关联。有意义吗?

最佳答案

我将提出每个 Core Data 问题遇到的相同问题,然后继续:确保您真的想为此使用 Core Data 而不仅仅是直接使用 sqlite。 Core Data 用于持久化对象图,而不是通用数据库。如果您已经为 Android 实现了数据库,那么您可能希望在 iOS 上使用相同的架构和设计。

好的,把它拿开。让我们假设 CD 确实是这里工作的最佳工具(或者此时您不能更改它)。我首先想到的是作弊。当然,这通常是我早期的想法之一......

看看您插入这些没有关系的对象的速度有多快。如果这足够快,那么这就是你作弊的方法:一开始不要存储实际的关系。存储描述关系的标识符的字符串列表。然后,一旦一切都已加载并且用户可以开始工作,随着时间的推移,在后台将字符串关系转换为真实关系。每当您获取记录时,您需要检查它是否仍然设置了作弊者属性,如果是,您将需要手动获取它的关系(然后清除作弊者属性)。

这不会使完全导入更快,但它给人一种更快的错觉,而这正是 iOS 90% 的目标。您甚至可能必须阻止某些操作(如删除),直到您完成所有内容的粘合,但这可能仍然比完全阻止用户更好。

关于ios - ios中如何用核心数据提高大数据导入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804861/

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