1

ディスクからディスクに一連のファイルをコピーする必要があるアプリがあります。これらのファイルは HD RAW 画像なのでサイズが大きくなります。NSFileManager の copyItemAtPath: メソッドが実際にコンテンツをメモリにロードして、宛先パスにコピーするとは思いもしませんでした。

このコピー タスクを最大 4 つの同時操作でキューに入れる必要があったため、転送中のメモリ クォータが破綻してクラッシュするのを回避できましたが、その結果、すべてのファイルのコピーが完了するまで 1 分待たなければならない場合があります ...

コンテンツをメモリにロードすることなく、パスから別のパスにファイルを複製するより効率的な方法はありますか?

これは、instrument でプロファイリング中に何が起こっているかのスナップショットです。

ここに画像の説明を入力

青: 生活費の合計

ピンク: NSFileManager copyItemAtPath: メモリへの影響。

http://s9.postimg.org/io3654ty7/Screen_Shot_2013_06_18_at_12_43_03_PM.png

4

2 に答える 2

0

コメントに似ていますが、バッファリングを処理するため、fopen、fread、fwrite を使用します。また、1 つの非常に重要なポイント - F_NOCACHE フラットを読み取りおよび書き込みファイル記述子の両方に設定する必要があります。そうしないと、ディスク キャッシュ専用のシステム メモリが大幅に増加し、大きすぎると強制終了する可能性があります。ここでファイル コピーとフラグを検索すると、UNIX または C タグ付きアイテムでこれを行うコードが確実に見つかります。

于 2013-06-19T12:15:45.653 に答える
-1

NSFileManager copyItemAtPath:toPath:error: および copyItemAtURL:toURL:error: は、iOS でファイルをコピーするために使用できる最も低レベルのメソッドです。

したがって、答えは NO です。

于 2013-06-18T17:13:53.337 に答える