CoreData+NSFetchedResultsController vs sqlite speed



我有一个关于sqlite的问题,但我在这里找不到答案,也许你可以回答我或在这里发布一篇文章,这对许多其他像我这样的新开发人员会有所帮助。

问题是关于使用sqlite和CoreData时的速度。

当我们使用CoreData时,我们可以使用NSFetchedResultsController,它使内存的使用更加高效。

当我们使用 sqlite 时,没有 NSFetchedResultsController 这样的东西,在我看来有两种方法:

  1. 在某个数组中加载 viewDidLoad 中 sqlite 数据库中的所有数据,然后在 tableView:cellForRowAtIndexPathPath 中使用此数组:使用 indexPath.row 作为数组索引显示数据 - 加载所有数据 我想到的坏主意

  2. 获取 viewDidLoad 中的行数以在 numberOfRowsInSection 中使用它,然后在 tableView:cellForRowAtIndexPath: 中仅加载所需的数据:使用这样的查询 [NSString stringWithFormat: "select id, name from myTable limit 1 offset %d", indexPath.row];

方式 2 是一个好主意还是每次都对 sqlite 进行查询以显示数据是一个坏主意?如果没有,哪种方式使用更快?

谢谢。

我认为这取决于您的数据大小。

如果尺寸很小,则方式 1 会更好。

如果你必须使用 sqlite,为什么不在可以显示 20 行时一次加载 30 行,

然后当你发现用户滚动到第 25 行时,你再加载 30 行。类似的东西。

我更喜欢核心数据。

您希望使用滑动数组样式缓存并使用 1 以外的限制,这样您就不会经常执行读取。 因此,如果您向缓存请求一行并且它不存在,您会在 N 行块中读取,期望需要进一步滚动。

或者不要一次重新发明一个类的CoreData,而只使用CoreData和NSFetchedResultsController。 :)

最新更新