[英]Why is CoreData database doubling in size after saving without making any changes?
我有一些简单的代码可以将存储在 NSMutableDictionary 中的图像(和其他一些值)和图像的缩略图保存到 CoreData:
self.imageInfo.lastSaved = [NSDate date];
self.imageInfo.thumbnail = UIImageJPEGRepresentation([self imageThumbnail], JPEGCompressionQuality);
if (!self.imageInfo.details)
{
self.imageInfo.details = [NSEntityDescription insertNewObjectForEntityForName:@"ImageDetails" inManagedObjectContext:[self managedObjectContext]];
}
self.imageInfo.details.values = [self imageValues];
NSError *error;
[[self managedObjectContext] save:&error];
我已验证图像为 2.1 MB(缩略图仅为 11 KB)。 所有其他数据只是 CGFloats 或短字符串。 当我第一次保存时,当我查看文档和目录中的数据库文件时,一切似乎都正常:
但是,当我再次保存而不更改任何内容时,我得到:
我已验证图像大小和缩略图大小保持不变。 五次保存后,我得到:
当我不改变任何东西时,我不明白尺寸的波动。 在第二次保存后,数据库的大小似乎翻了两番,然后在前 5 次保存后又回到只翻倍的大小。 我不明白这里发生了什么。
更新:在使用 sqlite3_analyzer 分析数据库时,我看到有效负载的大小是正确的,但是 sqlite 文件的大小恰好是 5 次保存后有效负载量的两倍。 这是标准行为吗? 是否出于某种原因创造了不必要的空白空间?
很难回答为什么的问题。 你在使用 Core Data 时有没有发现什么特别的问题? 如您的帖子中所述,单个 memory 或文件大小增加既不是故障也不是问题,但是如果 memory 或文件大小会无明显原因地持续增加,则说明失败。 如果您有疑问,可以检查 Core Data、您的应用程序代码和 SQLite 是否正常工作:使用 SQLite 客户端打开VACUUM
文件并输入命令。 关闭 SQLite 客户端并检查文件大小,然后在您的应用程序中重复 Core Data 命令(但不要添加新数据)并再次通过 SQLite 客户端输入VACUUM
。 文件大小不应更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.