Ios 如何有效处理核心数据中的大型数据集?

Ios 如何有效处理核心数据中的大型数据集?,ios,uitableview,core-data,nsfetchedresultscontroller,Ios,Uitableview,Core Data,Nsfetchedresultscontroller,我在应用程序中使用核心数据来存储实体,这些实体可能有多达5万个或更多的对象。我将其与表视图中的NSFetchedResultsController配对。由于单元重用,表视图工作得很好,但是我最大的问题是查询实际数据库以获取数据集 当我第一次加载表视图时,我需要数据库中的所有结果。我使用带有单个排序描述符的默认获取请求,并将batchSize设置为1000。在iPad2上,此查询最多需要15秒才能完成!我还必须在取消搜索后运行此查询,这样总体上会使应用程序无法使用。我的假设是,CD仍然需要解决所有

我在应用程序中使用核心数据来存储实体,这些实体可能有多达5万个或更多的对象。我将其与表视图中的NSFetchedResultsController配对。由于单元重用,表视图工作得很好,但是我最大的问题是查询实际数据库以获取数据集

当我第一次加载表视图时,我需要数据库中的所有结果。我使用带有单个排序描述符的默认获取请求,并将batchSize设置为1000。在iPad2上,此查询最多需要15秒才能完成!我还必须在取消搜索后运行此查询,这样总体上会使应用程序无法使用。我的假设是,CD仍然需要解决所有这些结果或设置部分或其他东西,我真的不知道,但仅仅使用batchSize是没有帮助的??内容也是非常动态的,因为新行总是被添加,排序顺序改变等等。。因此,缓存的好处有限

我现在认为最好的选择是在fetchRequest中使用fetchLimit,然后实现一些基本的分页。当表格视图滚动到最后时,是否获取下一个“页面”的结果?这种方法唯一的问题是我丢失了sectionIndex,我想不出任何方法来解决这个问题


有人有任何想法或已经处理过这个问题吗?

当您设置FRC的获取请求时,批量大小应该只比屏幕上任何时候可以看到的项目数大几项,可能是两倍。FRC已经为您进行了分页,您只需更好地设置页面大小。

s.newave

您的行有可变高度吗?如果是这样,那么表视图会要求您计算每个高度,这会导致提取每一行。15秒是获取5万件物品的合理时间

更大的问题是你不想改变你的设计。坦率地说,一个5万项的tableview是没有用的。你应该改变你的设计——不是因为CD慢,而是因为你的设计不实用

安德鲁


另外,获取结果控制器是为主流应用而设计的。50K表格视图不是主流应用程序。如果您坚持使用50K表视图设计,您将不得不制作自己的控制器。

为什么需要整个数据集?thx我了解批量大小是如何工作的,但是我的问题是实际的sql查询需要花费很长时间。但是为什么您需要提出这么大的要求?好问题。不幸的是,这就是产品的设计方式。我想它和其他任何一款有大量行的应用程序没什么不同,但它通过每页只显示x个结果来解决这个问题。模拟这种情况的唯一方法是使用fetchLimit来阻止核心数据获取更多必要的数据。数据本身也不适合我用来缩小结果集的一致分组。