我有一個應用程序必須將一堆文件從磁盤複製到磁盤。這些文件是HD原始圖像,因此它們很大。我並不懷疑NSFileManager copyItemAtPath:方法實際上會加載內存中的內容以將其複製到目標路徑。iOS:NSFileManager copyItemAtPath是內存密集型
我不得不將隊列中的這些副本任務排隊在最大併發操作數4以避免破壞我的內存過渡配額並避免崩潰,但結果是,我可能需要等待1分鐘才能完成複製所有文件...
他們是一種更有效的方式克隆文件從一個路徑到另一個,而無需加載內存中的內容?
這裏是同時與儀器剖析發生的事情的快照:
在藍色:總活撥款
在粉紅色:在的NSFileManager copyItemAtPath:對記憶的影響。
http://s9.postimg.org/io3654ty7/Screen_Shot_2013_06_18_at_12_43_03_PM.png
'NSFileManager'是一個高級的類。您可以使用各種低級C函數來複制文件。 – rmaddy
我也嘗試使用C調用CopyFile(),但似乎NSFileManager是建立在完全相同的調用之上,所以我有同樣的問題... – smorel
@ user2498023這一切都取決於你如何使用C調用。一種方法是以塊的形式讀取/寫入文件。作爲例子,您可以使用4k緩衝區。因此,在複製文件的任何時候,您的內存使用量不應超過幾千字節。 – rmaddy