在Windows中,有没有比迭代所有子目录更快的方法来获取目录大小
Is there any faster way to get a directory size in Windows than iterate over all its children?
我的程序需要获得所有子目录和子文件的目录大小,它通过递归枚举该目录中的所有对象并求和大小来实现这一点。但是,性能对于大目录来说是不可接受的。它比Windows资源管理器目录属性计算的大小要长,而且会导致硬盘发出更多的嘎嘎声。那么,我该如何优化这个过程呢?有合适的WinAPI函数或方法吗?
遍历目录中的文件是唯一通用的方法,Windows当然没有任何捷径可以做到这一点(在使用用户级权限运行的常规应用程序中,我不建议您的应用程序只需要管理员权限就可以运行!)。
如果目录包含大量文件,可能会有一点不同,这取决于你是对目录进行深度优先还是广度优先递归——广度优先需要"保存"要在当前目录中搜索的目录,当然,如果你有很多目录,这也会导致问题,深度优先的方法不需要任何存储,但意味着操作系统将同时打开更多的目录,并且可能会进行更多的头部移动。然而,这在很大程度上是一个边际差异。对于大型文件系统,"使用了多少空间"可能会有所不同——我实际上还没有尝试过。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 获取从C++中同一类中的构造函数调用的方法返回的值
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何从ECS中的模板方法获取组件?
- 如何在没有实例的情况下获取非静态方法的类型?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 使用内置的Windows方法获取文件夹的内容
- 使用push_back方法获取智能指针矢量时应用崩溃
- 方法获取字符串
- 我可以从静态基方法获取当前类类型 ID 吗?
- 填充字符数组的最佳方法(获取与cin.getline)
- 如何从指针到方法获取类(对象类型)
- 以下方法获取绝对值的速度是多少
- 从 Arduino 库中的方法获取私有布尔属性
- C 便携式方法获取u8字符串文字的值表示
- Qt QNetworkAccessManager 或其他方法获取 html 状态代码而不获取页面 contenet
- 在堆栈和堆上使用较低级别的方法获取缓冲区的长度
- WinDivert 1.0.5 DivertRecv() 方法 获取最后一个错误 998
- cgicc - cgi.getElements(),哪种方法?获取或发布
- 从静态方法获取类的类型