Ios 存储不同NSData时领域文件大小差异过大

Ios 存储不同NSData时领域文件大小差异过大,ios,iphone,swift,realm,Ios,Iphone,Swift,Realm,我目前正在Swift中从事一个iOS项目,我使用Realm作为我的数据库。 我正在存储一个领域对象,其中一个属性是NSData对象(实际上它是我转换为NSData的UIImage) 我的问题很容易理解:当我存储一个大小为3 Mo的NSData对象时,我的领域文件大小约为15 Mo。但当我的NSData对象大小为6 Mo时,我的领域文件大小变为80 Mo左右 有没有人遇到过这个问题? 这种差异有什么原因吗? 有没有办法解决这个问题?由于某些原因,领域文件大小不等于存储的数据大小 一个是数据的内部版

我目前正在Swift中从事一个iOS项目,我使用Realm作为我的数据库。 我正在存储一个领域对象,其中一个属性是NSData对象(实际上它是我转换为NSData的UIImage)

我的问题很容易理解:当我存储一个大小为3 Mo的NSData对象时,我的领域文件大小约为15 Mo。但当我的NSData对象大小为6 Mo时,我的领域文件大小变为80 Mo左右

有没有人遇到过这个问题? 这种差异有什么原因吗?
有没有办法解决这个问题?

由于某些原因,领域文件大小不等于存储的数据大小

一个是数据的内部版本

如果您的领域文件比您预期的要大得多,可能是因为您有一个RLMRealm,它引用的是数据库中较旧版本的数据

为了给您提供一致的数据视图,Realm只更新在运行循环迭代开始时访问的活动版本。这意味着,如果您从域中读取一些数据,然后在长时间运行的操作中阻塞线程,同时在其他线程上写入域,则该版本永远不会更新,并且域必须保留您可能实际不需要的数据的中间版本,导致文件大小随着每次写入而增加。额外的空间最终将被将来的写入重新使用,或者可能被压缩-例如,通过调用writeCopyToPath:error:

而且

在移动平台上,Realm文件大小从4KB开始,每次超过当前分配所需的文件大小都会增加一倍。此倍增在32MB处停止,此时文件将以16MB的增量增长。所以16MB->32MB->48MB

这就是文件大小比您预期的大的原因

要优化(删除所有可用空间)域文件大小,可以使用
writeCopyToPath:error:
方法。复制的文件将被压缩