Objective c 频繁(5Hz)核心数据保存的性能开销

Objective c 频繁(5Hz)核心数据保存的性能开销,objective-c,ios,core-data,nsmanagedobject,nstimeinterval,Objective C,Ios,Core Data,Nsmanagedobject,Nstimeinterval,对于一个播放音频文件的iPhone应用程序,我正在开发一个系统来跟踪用户听过的任何一集的进度(例如,他们听file1的前4:35,然后启动另一个文件,然后返回file1,在4:35开始) 我已经建立了一个核心数据模型来存储元数据,但我想知道在播放过程中我可以/应该如何积极地缓存当前位置 目前,我刚刚插入了save:调用,该方法以前用于更新时间标签和uisliderplayhead。NSTimerInterval每0.2秒调用一次该方法 0.2秒的精度比我跟踪进度缓存所需的精度高得多。无论如何,这

对于一个播放音频文件的iPhone应用程序,我正在开发一个系统来跟踪用户听过的任何一集的进度(例如,他们听file1的前4:35,然后启动另一个文件,然后返回file1,在4:35开始)

我已经建立了一个核心数据模型来存储元数据,但我想知道在播放过程中我可以/应该如何积极地缓存当前位置

目前,我刚刚插入了save:调用,该方法以前用于更新时间标签和uisliderplayhead。NSTimerInterval每0.2秒调用一次该方法

0.2秒的精度比我跟踪进度缓存所需的精度高得多。无论如何,这些值都会四舍五入到最接近的秒,因此基本上每次保存的4/5是多余的

不过,考虑到这几乎是所有核心数据都在做的事情,它在任何给定的时间都只处理单个记录的单个值,我想知道只做额外的、不必要的save:,或者管理第二个计时器以减少更新的频率是否更有意义

目前,Instruments报告每个事件的保存持续时间约为800,在2000年左右达到峰值。我真的不知道如何解释这些结果。模拟器中的实际应用程序性能似乎没有受到显著影响


如果这种节省是如此便宜,以至于保持代码复杂性低(仅管理一个计时器)是有意义的,我会保持原样,但我的直觉是,无论多么便宜,这都需要大量操作。

您不应该看到性能上的差异,因为您可能会看到电池消耗方面的差异

在iOS设备中使用闪存存储写入磁盘要比在计算机上写入旋转平板硬盘快得多。此外,与仅保持硬盘旋转相比,写入硬盘并不需要花费太多电力。但是,相对于读取或仅保留闪存而言,写入闪存需要更大的功率


换句话说,在iOS设备上写操作的功耗是不可忽略的。如果你可以不使用4hz,那么你的应用程序的电池消耗量很容易得到显著的改善。

你可以完全跳过保存,当用户移动到另一个流时,只在音频流中记录当前位置吗?我可以,但我有点担心,即使我做了一些准备工作,以确保它总是在应用程序退出之前保存,如果它崩溃或(例如)连接中断,文件访问丢失,或其他一些边缘情况,它也不会得到更新。我永远不想失去超过10秒的进步,所以我至少需要做一个10秒的计时器;但我不希望只有10秒的精度。我明白了——你在保存多少数据?你只需要每隔一天写一个float,我只在一个文档中保存一个NSNumber属性。10秒是我在不显式执行保存操作的情况下希望达到的最大值,因此我正在尝试找出每5秒、每1秒、每秒钟五次等之间的性能差异(如果有)。如果我可以在现有计时器上执行此操作,我可以使代码非常精简。如果我需要开始管理第二个计时器,事情会变得有点复杂,因为我正在使用的音频播放器库在下面工作。你能告诉我有多少额外的电池吗?我意识到做同样的事情三次会消耗三倍的能量。但比方说,听一个小时的播客,节省1Hz的电量,占用2%的电池(包括所有其他电话操作)。去3Hz会用6%的面糊吗?或者2.1%?这很难说。这将取决于设备的具体型号、应用程序执行这些写入的秒数以及当时正在执行的其他操作。仪器确实有一个工具,可以模拟查看电池消耗量。检查这里:更正:上面评论中提到的工具可以帮助您测量实际设备上的电池消耗。