gpt4 book ai didi

iOS NSArray、NSSet 与核心数据查询(获取请求)

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

我和我的老板正试图找出处理核心数据中数据的最佳方式,我们正试图找出两种不同处理方式的优缺点。我们正在研究不同方法的效率。

1) 我们将数据模型中的每个表存储到一个 NSArray 或 NSSet 中,并且仅在修改了一行或添加了一行时才发出获取请求。然后我们通过使用谓词过滤它们来操纵 NSArray 和 NSSets 到我们需要的。

2) 我们一开始就设置了获取请求,只获取我们需要的复合谓词数据,然后从那里开始。

我们测试了两者之间的时间。选项 1) 0.000259 秒 选项 2) 0.000528 秒

我们也在考虑一些事情。选项 1 似乎更快,但这只是因为我们只处理大约几百行数据,并且如果数组变得很大,比如我们开始达到一百万行,我们会遇到内存问题。

我们认为选项 2 应该是更快的选项,但它是否只是因为没有足够的数据而变慢?如果有一百万行,它会遇到内存问题吗?

如果您能解释为什么一个比另一个更有效,我们将不胜感激。

最佳答案

您不想将一百万个对象拉入内存,然后在那里过滤它们。那是非常低效的。数据库已经过优化,非常擅长过滤大型数据集。您应该让 SQLite 完成繁重的工作,而不是将所有对象推送到整个 Core Data 堆栈。

如果可能,您主要应该通过关系来获取您的数据。

如果您需要使用获取请求(例如,因为您想要查询所有数据或您想要搜索特定对象),那么您应该使您的谓词尽可能窄,并且只将对象拉入您真正需要的上下文中需要。

为了快速发出获取请求,您应该将谓词从便宜到昂贵排序(请参阅 Apple 的 Predicate Programming Guide)并在实体上使用适当的索引。我们在 objc.io issue #4 中写了一些关于此的内容, 具体来说 Fetch Requests .

关于iOS NSArray、NSSet 与核心数据查询(获取请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901247/

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