2012-03-05 23 views
0

我使用下面的代码一个NSMutableArray保存到磁盘:iOS的 - 所用时间,以节省阵列磁盘

[myArray writeToFile:filePath atomically:YES]; 

假设大约400个对象的数组,谁能告诉我,如果通过这种方法节约是一个耗时的过程?目前,文件可能会相当快速地被连续保存多次(我正在尝试修复),但是我想知道如果数组变大得多,这会在某个阶段导致问题吗?

亲切的问候

+0

您期待什么样的问题? – 2012-03-05 07:06:08

+0

好吧,为了夸大其词,如果保存需要20秒,并且一个方法试图保存到一个文件,然后另一个方法试图在'20秒'之前保存到同一个文件,它会导致数据腐败? – achiral 2012-03-05 07:11:00

+0

只要考虑磁盘I/O是昂贵的。如果您的数据连续快速变化,请尝试在内存本身进行管理。在绝对必要时写入。 – Vignesh 2012-03-05 07:11:03

回答

1

仅供参考,iPod Touch 4闪存写入速度为≈18 MB/s(我已使用this文章中的代码进行测量)。

通过转到Xcode Organizer→设备选项卡→在设备中选择应用程序→您的应用程序→选择文件,然后按下载,您可以看到设备上保存文件的大小。

对于模拟器,请转到~/Library/Application Support/iPhone Simulator/<iOS version>/Applications/<App ID>/Documents

0

这里有几件事情 -

  1. 尽量限制I/O事务的数量一般规则。
  2. 如果您可以尝试通过某种内存缓存&将缓存仅在需要时刷新到磁盘来限制I/O。
  3. 接下来为您提供I/O任务;只有一个线程正在写&正在读取您的文件。如果你不能确保这一点,那么你需要实现某种文件锁定机制等等。所有这些都可能变得很难看。更好的是,你只需要一个线程同时编写&阅读。这样任务就被序列化了。
0

而不是写入例如在数组的每次更新时,为什么不将更改保存在内存中,只需将其刷新到applicationDidMoveToBackground或其他应用程序事件的磁盘上,以确保它在应用程序被终止之前被写入?