我有一个应用程序必须将一堆文件从磁盘复制到磁盘。这些文件是高清原始图像,因此它们很大。我并不怀疑NSFileManager copyItemAtPath:方法实际上会将内容加载到内存中以将其复制到目标路径。
我不得不将这个副本任务排在一个队列中,其中包含4个最大并发操作,以避免破坏我的过渡内存配额并避免崩溃,但结果是,我必须等待1分钟才能完成所有文件的复制... < / p>
将文件从路径克隆到另一个文件而不必将内容加载到内存中是否是一种更有效的方法?
以下是使用工具进行分析时发生的事情的快照:
蓝色:总生活分配
粉红色:NSFileManager copyItemAtPath:对内存的影响。
http://s9.postimg.org/io3654ty7/Screen_Shot_2013_06_18_at_12_43_03_PM.png
答案 0 :(得分:0)
与评论类似,但使用fopen,fread,fwrite为他们处理缓冲。另外一个非常重要的一点 - 你应该在读写文件描述符上设置F_NOCACHE平面,否则你将大大增加专用于磁盘缓存的系统内存,如果太大就可以让你被杀死。如果您在文件副本和此处搜索标记,您肯定会在unix或C标记的项目中找到执行此操作的代码。
答案 1 :(得分:-1)
NSFileManager copyItemAtPath:toPath:error:和copyItemAtURL:toURL:error:是可用于在iOS中复制文件的最低级别方法。
所以答案是否定的。