c – 如何快速删除数百万个文件
我们使用BOOST1.63 boost :: filesystem :: remove_all(dir_to_remove)来删除包含数百万个文件的文件夹(每个文件的大小为1MB).文件夹“dir_to_remove”具有子文件夹,每个子文件夹的文件不超过1000个.删除所有文件需要10分钟以上.我们使用CentOS6.5.
在检查了operations.cpp之后,我们意识到BOOST实际上使用了Linux rmdir和unlink命令: # define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0) # define BOOST_DELETE_FILE(P)(::unlink(P)== 0) 这篇article列出了几种在Linux上更有效地删除文件的方法.它建议使用rsync. 我们如何用C快速删除数百万个文件? 解决方法
是的,std :: filesystem :: directory_iterator非常糟糕.我希望在即将到来的
P1031 Low level file i/o中完全取代该设施(注意不会在WG21上直播到2018年6月),其中有一些可以很好地扩展输入,所以我们就可以了.
与此同时,我建议你使用https://ned14.github.io/afio/,这是P1031的参考实现,特别是 >从第一个条目开始取消链接. 我会根据您的特定文件系统对所有六种方法进行基准测试,并选择最快的方法.有些使用基于inode编号的B树,有些基于leafname,它会有所不同.但基本上你想避免过多的树重新平衡,并避免对叶名的深O(log N)查找,因此有序的取消链接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |