【发布时间】:2016-01-13 09:06:15
【问题描述】:
(如果文本很多,请注意底部有一个 TLDR)
我正在研究从服务器中提取和显示图像和视频的东西。基本上考虑不同的文件夹,它们后面有您可以查看的图片和视频。
每个文件夹都会以相当一致的方式更新新图片和视频,因此我希望能够一次存储尽可能多的这些图片和视频,以通过预加载和保存一些数据来最大限度地减少加载/请求数据库的时间.
让我先说我很可能完全错了我在这句话之后写的任何东西。这就是我问的原因。我不是 100% 清楚每种方法的功能
我会尽量安排得井井有条:
要求/用途:
- 保存大文件(图像和视频数据)以便快速访问(从服务器填充)
- 已保存数据的快速旋转;不断更新
- 文件绝对是临时的,我不想显示过期信息,但我不想每次需要查看时都重新加载类似的内容。
- 需要能够完全存储多个文件夹的数据,例如中高范围的每个文件夹 8-12MB 的文件(如果只有一个可以立即访问并且其余部分仍然必须从数据库加载,则不是很有用查看时)
- 高效的网络使用(避免每次都重复调用来完全重新填充表)
- 跨应用背景持续/无限期存储新数据,直到有足够的互联网上传
- 文件夹与该文件夹中的文件之间存在显着的一对多关系...我需要能够轻松访问文件夹中的所有文件
- (更容易编码/维护...不是必需的,但会很好)
我对Core Data的理性:
优点:
- 默认支持大部分我想做的事情
- 以易于查询的方式轻松保存我的模型对象的所有其他方面,而不是大型媒体文件(例如文件夹名称等)
- 有很多很棒的工具,例如 Magical Record 和 RestKit 可以与服务器交互/简化操作
- 可以通过保存到文件系统一次存储更多数据
- 易于坚持
缺点:
- 这不是典型的 Core Data 设置,因为我并不特别关心永久存储,我只是希望尽可能多的文件夹可以立即可用;根据需要清除内存。
- SPEED:小幅编辑仍需要重新保存整个上下文。这意味着加载、同步和刷新比缓存要慢(请参阅this 了解实际速度指标……这绝对不是不重要的)。大量持续写入磁盘似乎在性能方面可能存在问题。
缓存的合理性:
优点:
- QUICKER:更符合半永久性方面(保存数据的快速旋转等)
- 更轻松的内存管理(不必持续手动清除已保存到 Core Data 中我不再需要/不想要的旧数据)
- 更少的样板/代码数量
缺点:
- 默认不保留,在后台清除
- 使用较少的内存;真的很担心必须不断删除数据并将数据重新加载到内存中的性能问题。
- 没有查询支持并且(我不认为)没有办法选择性地清除对象的某些属性同时保留其他属性(我认为您必须解码整个对象,手动清除一些信息,然后重新编码?)
- 默认情况下清除应用背景(即在转储信息以释放可能需要的内存时控制较少)
TLDR
我应该使用缓存还是 Core Data 来保存将从服务器半频繁更新的大文件?我要考虑的因素是效率(最小化服务器请求;存储数据直到被新数据覆盖)、速度(写入/加载)、数量数据存储/可用内存(内存问题涉及使用缓存移动大量数据,它会影响性能。在我开始看到不良性能之前,我可以同时在内存中拥有多少个文件?),可定制性(在我看来,我需要介于两者之间的东西,所以更容易适应我的用途)
而且重要的是....还有什么我完全错过的吗?像某种文件系统管理器或独特的缓存 ma-jiggy?)
【问题讨论】:
标签: ios objective-c caching core-data video