我的程序需要获得所有子目录和子文件的目录大小,并通过递归枚举该目录中的所有对象并总结大小来实现。但是,对于大型目录而言,性能是不可接受的。它比Windows资源管理器目录属性计算大小更长,它会使硬盘驱动器发出更大的声音。那么,我该如何优化这个过程呢?是否有适当的WinAPI函数或方法?
答案 0 :(得分:2)
迭代目录中的文件是唯一的通用方法,Windows当然没有任何捷径(在使用用户级权限运行的常规应用程序中 - 我不建议你应用程序应该要求管理员权限才能运行!)。
如果目录包含大量文件,可能会有一些区别,具体取决于您是执行目录的深度优先还是广度优先递归 - 广度首先要求“保存”目录为在当前目录中搜索,如果您有许多目录,当然深度优先方法不需要任何存储,但这意味着操作系统将同时打开更多目录,这当然也会导致问题 - 并且可能会产生更多头部动作。然而,它很可能是一个非常小的差异。对于大型文件系统,“使用多少空间”可能会产生影响 - 我还没有尝试过。