* FASTEST *目录列表

时间:2010-08-27 09:25:12

标签: c# file-io directory

我有大量的目录,我想尽快读取所有文件。我的意思是,快速没有DirectoryInfo.GetFiles,但是“快速从磁盘低级别获取集群”。

当然,.NET 2.0,c#

这里有类似的问题,但这种方法并不好:

C# Directory listing massive directory

有人在Fi​​ndFirst / FindNext上建议了pInvoke。有人试过这个并且能够分享结果吗?

3 个答案:

答案 0 :(得分:5)

对于“正常”方法,基本上一切都归结为FindFirstFile / FindNextFile,你实际上并没有比这快得多......而且这不是超级涡轮增压

如果真的需要速度,请考虑手动阅读MFT - 但要知道这需要管理员权限,并且每当NTFS更新时都容易中断(哦,是啊,不适用于非NTFS文件系统)。您可能需要查看具有this code和MFT内容的USN

然而,也许有一个不同的解决方案。如果您的应用程序不断运行并且需要接收更改,您可以通过执行一个慢速FindFirstFile / FindNextFile传递开始,然后使用目录更改通知支持来获知更新...适用于受限用户,不依赖于文件系统结构。

答案 1 :(得分:3)

为了获得最佳性能,可以将P / Invoke NtQueryDirectoryFile记录为ZwQueryDirectoryFile。

(没有直接访问磁盘并直接读取原始文件系统结构,这通常是不切实际的。)

答案 2 :(得分:0)

尝试使用this DirectoryManager之类的内容,并根据您的需求进行优化。比.NET Framework GetDirectories()GetFiles()工作得更快,因为我们在那里省略了跨平台检查和调整。