【问题标题】:Bad performance of Core Data "save" operation on the managedObjectContext在 managedObjectContext 上的核心数据“保存”操作性能不佳
【发布时间】:2011-12-29 09:39:21
【问题描述】:

我有一个使用 Core Data 的 iPhone/iPad 应用程序。

在我的数据库中,我只有一张表,尽管它非常大(大约 40 列)。 当我构建数据库时,我创建并插入了大约 13,000 个新实体,然后我调用了“saveContext”。

for (NSArray *singleDiamond in allDiamonds)
{
     @try 
     {
         if (//Some validation)
         {
             Diamond *diamond = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Diamond class]) 
                                                              inManagedObjectContext:self.managedObjectContext];
             //Do setup for diamond...
         }
     }
     @catch (NSException *exception) {NSLog(@"%@",[exception message]);}
 }
NSLog(@"Start Saving Context...");
[self saveContext];
NSLog(@"End Saving Context...");

我的问题是只有 'saveContext' 方法需要 23 秒 才能执行。这是不可接受的。

我做错了什么吗? 如何提高这里的性能?

【问题讨论】:

  • 请给我一些想法或建议,通过批量插入在核心数据中插入每 100 个对象以获得快速性能,因为在我的 iPad 设备中,我有超过 6000 个联系人并以最佳性能插入核心数据,所以请帮我解决这个问题。
  • 与 Swift 批量插入示例类似的问题 stackoverflow.com/questions/32034100/…

标签: iphone ios sqlite core-data nsmanagedobjectcontext


【解决方案1】:

您应该在批量插入过程中多次调用saveContext,然后调用reset 以“忘记”之前插入的托管对象。例如,在我的情况下,我每 100 个对象保存一次上下文。此外,您应该为导入创建一个专用上下文并对其进行优化(通过将 undomanager 设置为 nil,因为您不需要回滚/撤消整个插入)。 在这里阅读:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html

【讨论】:

  • 好吧,我确实尝试保存每个“n”个项目,但与在过程结束时保存所有内容相比,我没有得到任何显着的改进。我试过 n {0 , 100 ,1000 , 5000}
  • @daveoncode 请给我想法或建议,通过批量插入在核心数据中插入每 100 个对象以获得快速性能,因为在我的 iPad 设备中,我有超过 6000 个联系人并以最佳性能插入核心数据所以请帮我解决这个问题。
  • 调用重置对我的性能影响微乎其微。我发现的最佳方案是每 100 条记录保存一次,无需重置。
【解决方案2】:

保存 13.000 件物品需要一段时间。

这 13.000 项是否仅在您首次启动应用程序时保存,如果是这样,为什么不将数据库作为应用程序的有效负载提供。 这样当数据库不存在时,只需从包中复制一个即可。

【讨论】:

  • 我不能。我从互联网上获取了一个 CSV,我正在用它构建数据库。
  • @rckoenes 请给我想法或建议,通过批量插入在核心数据中插入每 100 个对象以获得快速性能,因为在我的 iPad 设备中,我有超过 6000 个联系人并以最佳性能插入核心数据所以请帮我解决这个问题。
  • @NikunjR.Jadav 您应该发布自己的问题,而不是在其他问题的答案中请求代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2011-01-12
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多