我目前正在使用Swift开发一个iOS项目,我使用领域作为我的数据库。我正在存储一个领域对象,其属性之一是NSData对象(实际上,它是我转换为NSData的一个UIImage )。
我的问题很容易理解:当我存储一个大小为3 Mo的NSData对象时,我的领域文件大小大约为15 Mo。但是当我的NSData对象大小为6 Mo时,我的领域文件大小将变为80 Mo左右。
有人经历过这个问题吗?有什么原因造成这种差异吗?有办法解决这个问题吗?
发布于 2016-06-08 15:48:51
由于某些原因,领域文件大小不等于存储的数据的大小。
一个是数据的内部版本。
如果您的领域文件比您预期的要大得多,这可能是因为您有一个RLMRealm,它引用的是数据库中数据的旧版本。 为了给您提供数据的一致视图,王国只更新在运行循环迭代开始时访问的活动版本。这意味着,如果从领域读取一些数据,然后在长时间运行的操作中阻塞线程,同时在其他线程上写入域,则版本永远不会更新,并且王国必须保留您可能实际上不需要的数据的中间版本,从而导致文件大小随每次写入而增大。额外的空间最终将被将来的写操作重用,或者可能被压缩-例如,通过调用writeCopyToPath:error:。
https://realm.io/docs/objc/latest/#file-size--tracking-of-intermediate-versions
另外,
在移动平台上,领域文件大小从4KB开始,每次超过当前分配时都会加倍大小。这个加倍停止在32 of,此时文件以16 of的增量增长。因此,16 So的-> 32 So -> 48 So。
https://github.com/realm/realm-cocoa/issues/2631#issuecomment-145566190
这就是文件大小比您预期的要大的原因。
要优化(以删除所有空闲空间)领域文件大小,可以使用writeCopyToPath:error:方法。复制的文件将被压缩。
https://stackoverflow.com/questions/37686701
复制相似问题