2012-03-05 21 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或其他應用程序事件的磁盤上,以確保它在應用程序被終止之前被寫入?