繁体   English   中英

为什么 CoreData 数据库在保存后不做任何更改就翻倍了?

[英]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 或短字符串。 当我第一次保存时,当我查看文档和目录中的数据库文件时,一切似乎都正常:

  • Image_Producer.sqlite 37 KB
  • Image_Producer.sqlite-shm 33 KB
  • Image_Producer.sqlite-wal 2.1 KB

但是,当我再次保存而不更改任何内容时,我得到:

  • Image_Producer.sqlite 4.2 KB
  • Image_Producer.sqlite-shm 33 KB
  • Image_Producer.sqlite-wal 4.3 MB

我已验证图像大小和缩略图大小保持不变。 五次保存后,我得到:

  • Image_Producer.sqlite 4.2 MB
  • Image_Producer.sqlite-shm 33 KB
  • Image_Producer.sqlite-wal 3.3 KB

当我不改变任何东西时,我不明白尺寸的波动。 在第二次保存后,数据库的大小似乎翻了两番,然后在前 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM