* FASTEST *目录列表

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

当然,.NET 2.0,c#

类似的问题在这里,但这种方法没有任何好处:

C#目录列出海量目录

有人建议在FindFirst / FindNext上使用pInvoke。 有人试过这个并且能够分享结果吗?

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

如果你真的需要速度,请考虑手动阅读MFT – 但要知道这需要管理员权限,并且每当NTFS更新时都容易中断(并且,哦,是的,对于非NTFS文件系统不起作用)。 你可能想看看这个有USN和MFT东西的代码 。

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

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

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

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