1

我有一个必须将一堆文件从磁盘复制到磁盘的应用程序。这些文件是高清原始图像,所以它们很大。我没有怀疑 NSFileManager copyItemAtPath: 方法实际上会将内容加载到内存中以将其复制到目标路径。

我不得不将这个复制任务排在一个最多有 4 个并发操作的队列中,以避免破坏我的传输内存配额并避免崩溃,但结果是,我可能不得不等待 1 分钟才能完成所有文件的复制......

他们是一种更有效的方式来将文件从路径克隆到另一个路径而无需将内容加载到内存中吗?

以下是使用仪器进行分析时发生的情况的快照:

在此处输入图像描述

蓝色:总生活分配

粉红色: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,因为它们会为您处理缓冲。还有一点很重要——你应该在读写文件描述符上都设置 F_NOCACHE,否则你将大大增加专用于磁盘缓存的系统内存,如果太大可能会导致你被杀死。如果您在此处搜索文件副本和标志,您肯定会在 unix 或 C 标记项目中找到执行此操作的代码。

于 2013-06-19T12:15:45.653 回答
-1

NSFileManager copyItemAtPath:toPath:error: 和 copyItemAtURL:toURL:error: 是你可以用来在 iOS 中复制文件的最底层的方法。

所以答案是否定的。

于 2013-06-18T17:13:53.337 回答