如何使用iOS快速save/load200,000个double类型存入内存?

How to Quickly save/load 200,000 of double type into memory using iOS?

我尝试使用 NSKeyedArchiver save/load 具有 200,000 个双精度值的数值数据。保存大约需要 160 秒,加载需要 1900 秒。

当我改用Core Data时,它更慢了。

但是我在 iOS 中找不到未加密的归档程序。代码如下:

VectorWeights::iterator wit;

for ( wit=m_Weights.begin(),ind=0; wit<m_Weights.end(); wit++,ind++ )
{
    [archiver encodeObject:[[NNW alloc] initWithNNWeight:*wit] forKey:[[NSString alloc] initWithFormat:@"%@_W%ld",label,ind]];
}

NNW 编码器如下:

@implementation NNW
- (void)encodeWithCoder:(NSCoder *)coder
{
    [coder encodeObject:self.internal->label forKey:NNWid];
    [coder encodeDouble:self.internal->value forKey:NNWvalue];
}

有没有更好的方法呢?

更新:标签是 NString* 类型,VectorWeight 是 std::vector

为什么不创建一个 NSMutableData 对象,让它足够大 (200000 * sizeof (double)),获取一个指向字节的指针,将 200000 双倍的 memcpy 到其中,并将其保存到文件中。应该明显少于 100 毫秒。

或者只是

double* p = malloc (200000 * sizeof (double));
... fill with 200,000 double values
NSData* data = [NSData dataWithBytesNoCopy:p length: 200000 * sizeof (double)];
[data writeToURL:someURL atomically:YES];