我将双精度数组保存在 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; 我