首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在存储不同的NSData时,领域文件大小的差异过大

在存储不同的NSData时,领域文件大小的差异过大
EN

Stack Overflow用户
提问于 2016-06-07 18:28:09
回答 1查看 784关注 0票数 2

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

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

有人经历过这个问题吗?有什么原因造成这种差异吗?有办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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:方法。复制的文件将被压缩。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37686701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档