我将双精度数组保存在 NSData* 对象中,该对象作为二进制属性保存在核心数据(SQLite)数据模型中。我这样做是为了在 iPhone 应用程序中存储用于绘图的采样数据。有时,当二进制对象中有超过 300 个双精度时,并非所有双精度都保存到磁盘中。当我退出并重新启动我的应用程序时,可能只有 25 个数据点保持不变或多达 300 个。
将 NSSQLitePragmasOption 与 synchronous = FULL 一起使用,这可能会有所作为。很难说,因为错误是间歇性的。
鉴于使用 synchronous = FULL 导致的性能问题警告,我正在寻求建议和指点。
谢谢。
[[编辑:这里是代码。]]
-addToCache: 的(尚未实现的)意图是将每个新数据添加到缓存中,但仅定期刷新(错误?)数据对象。
来自 Data.m
@动态数据集;// NSData * Data 实体的属性 - (void) addDatum:(double_t)datum { DLog(@"-[Data addDatum:%f]", datum); [self addToCache:datum]; } - (void) addToCache:(double_t)datum { 如果(缓存 == 零) { 缓存 = [NSMutableData dataWithData:[self dataSet]]; [缓存保留]; } [缓存 appendBytes:&数据长度:sizeof(double_t)]; DLog(@"-[Data addToCache:%f] ... [缓存长度] = %d; 缓存 = %p", datum, [缓存长度], 缓存); [自刷新缓存]; } -(无效)总结 { DLog(@"-[数据总结]"); [自刷新缓存]; [缓存释放]; 缓存=零; DLog(@"[self isFault] = %@", [self isFault] ?@"YES" : @"NO"); // [self isFault] 始终为 NO。 } -(无效)flushCache { DLog(@"刷新缓存到存储"); [自我设置数据集:缓存]; DLog(@"-[Data flushCache:] [[self dataSet] length] = %d", [[self dataSet] length]); } -(双*)字节 { return (double*)[[self dataSet] bytes]; } - (NSInteger) 计数 { return [[self dataSet] 长度]/sizeof(double); } -(无效)转储 { ALog(@"转储数据"); NSInteger numDataPoints = [自我计数]; 双*数据=(双*)[自字节]; ALog(@"numDataPoints = %d", numDataPoints); 对于 (int i = 0; 我