如何提高iOS核心数据保存操作性能

如何提高iOS核心数据保存操作性能,ios,iphone,core-data,Ios,Iphone,Core Data,我有一个简单的表,它有一个名为“details”的属性,类型为Transformable 现在,该属性几乎每3秒或4秒更新一次,因为在给定时间后会更新一些监控代码。基本上,NSDictionAnry对象每次都会从应用程序中的不同点更新,并作为可转换属性在核心数据中更新 我有用户报告手机被加热,因为我实现了这件事。在我使用NSUserDefaults之前,因为数据没有那么大,但由于一些结构上的变化,我不得不将其放入核心数据中。我检查了CPU时间分析器,没有找到任何对任何其他方法的递归调用 因此,核

我有一个简单的表,它有一个名为“details”的属性,类型为Transformable

现在,该属性几乎每3秒或4秒更新一次,因为在给定时间后会更新一些监控代码。基本上,NSDictionAnry对象每次都会从应用程序中的不同点更新,并作为可转换属性在核心数据中更新

我有用户报告手机被加热,因为我实现了这件事。在我使用NSUserDefaults之前,因为数据没有那么大,但由于一些结构上的变化,我不得不将其放入核心数据中。我检查了CPU时间分析器,没有找到任何对任何其他方法的递归调用

因此,核心数据提取和保存操作每3到4秒进行一次

我唯一能想到的就是将save操作放在AppDelegate的applicationWillTerminate中

但我想知道是否有不同的方法。正如一些文章所说,应用程序将终止,但有时可能不会被调用。有没有办法减少获取和保存操作的开销

NSArray *results = [[[APPDEL managedObjectContext] executeFetchRequest:[Info fetchRequest] error:&error] mutableCopy];
    Info *userInfo = [results firstObject];
    if (userInfo.userCredentials)
    {
        userInfo.userDetails = (NSDictionary *)_globalAppCurrentStateDict;
        //[[APPDELEGATE managedObjectContext] save:nil];
    }

现在已将保存更改为willTerminate。将检查性能。

每3-4秒保存一次属性更改听起来不像是核心数据的大量工作。它在这些方面非常有效(假设您使用的是SQLite后端而不是XML)。首先,我将通过仪器运行代码,看看性能问题到底在哪里(尝试核心数据仪器、能量日志和文件活动等,而不仅仅是CPU仪器)。我怀疑你正在做的事情比你想象的要密集得多。如果这个属性相当大,我的意思是字典大约有200个键,这听起来像是对字典的错误使用。是的,这可能会很痛苦,因为它正在与核心数据作斗争。我会重新考虑这个模型,把这个对象分解。