来自iPhone编程指南
创建文件或写出时 文件数据,请保留以下内容 指引:
- 最小化您写入磁盘的数据量。文件操作相对较慢,并且涉及写入闪存盘,其寿命有限。帮助您最小化文件相关操作的一些特定提示包括:
- 仅写入已更改的文件部分,但只在可以时进行聚合更改。
- 避免写出整个文件只是为了改变几个字节。
- 定义文件格式时,将经常修改的内容组合在一起,以便最大限度地减少每次需要写入磁盘的块总数。
- 如果您的数据由随机访问的结构化内容组成,请将其存储在Core Data持久性存储库或SQLite数据库中。如果您操作的数据量可能增长到超过几兆字节,这一点尤为重要。
- 避免将缓存文件写入磁盘。此规则的唯一例外是当您的应用程序退出并且您需要编写可用于在下次启动时将应用程序恢复到相同状态的状态信息。
醇>
我读了一篇关于英特尔固态硬盘的文章(遗憾的是我现在无法找到),其中提到主要的长寿问题是由于操作系统实际上没有删除数据,而只是标记了阻塞是免费的,当那些“免费”块被写入(导致读取 - 修改 - 存储,而不仅仅是存储)时会导致相当痛苦的减速。这也适用于iPhone,即当文件被更频繁地删除时,驱动器是否更容易受到速度的影响?
我正在考虑基于重做日志的文件格式,这样我可以维护跨会话撤消,我也没有随机写入(总是追加),但在某些时候我想我将不得不合并至少一部分日志,以使文件大小保持在合理的水平。在这种情况下,我的问题是,哪个更有效(在驱动器寿命方面)?我有几条路径,我考虑过
但我愿意接受建议。我猜测典型的文件大小范围从几KB到几百KB,但是更高的值是更多的推测。
答案 0 :(得分:2)
您不必担心该特定问题。与许多嵌入式设备一样,iPhone使用类似于SSD控制器芯片使用的接口(类似ONFI)直接与闪存芯片对话。 iPhone上的FTL(闪存转换层)是由OS管理的软件,它完全了解正在使用的块。
虽然Apple没有记录这种行为,但您可以在公共xnu源代码中间接看到它的证据(在很长一段时间内)已经在HFS +中支持与块层通信,特定块不再有用。没有开源块设备可以对该信息做任何事情,但如果您使用越狱的iPhone并反汇编其内核,您将看到它在iPhone上使用。
显然你不应该试图依赖这种行为,我只是说你不用担心,它做对了。