gpt4 book ai didi

cocoa-touch - 核心数据 : Can a Large Background Fetch Block Fetch Request on the Main Thread?

转载 作者:行者123 更新时间:2023-12-04 06:14:11 25 4
gpt4 key购买 nike

我有一个 iPad 应用程序,在 Core Data 中有相当多的文本数据(大约 75MB)。每周导入新数据。导入发生在具有自己的 NSManagedObjectContext 甚至自己的 NSPersistentStoreCoordinator 的辅助线程上。

导入过程包含许多提取,除了一个之外,所有这些都非常有效,因为它返回大量记录(这可能可以稍微优化一些,但不是实质性的。)不幸的是,在大提取期间制作后,主 UI 被阻止(因为它还必须从商店中获取并且获取被延迟)。

我已经在各个点测试了导入过程,以确认它确实在后台线程上。我仔细检查了代码以确保使用带有单独协调器的导入上下文。 undomanager 为零,并且经常重置导入上下文。

是否有可能即使使用单独的 NSPersistentStoreCoordinator 后台的大型提取请求仍然会阻止主线程上的提取请求,或者我做错了什么?

最佳答案

后台线程上的操作不能阻塞主线程,但它可以消耗大量内存,主线程可以更有效地运行。

听起来您的大量后台提取“返回大量记录”正在内存中创建一个大型对象图,该图正在占用您的内存。低内存阻碍主线程。

使用 Instruments 来分析您的内存以进行确认。

解决方案是仅在内存中保留实际的事件的、填充的对象,您绝对必须这样做。您可以使用较小的提取、作为错误提取、提取属性或作为 managedObjectID 提取以及类似的方法来减少内存占用。

此外,请确保下载数据本身的网络操作不会占用内存或周期。

关于cocoa-touch - 核心数据 : Can a Large Background Fetch Block Fetch Request on the Main Thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471326/

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