我有大量的目录,我想尽快读取所有文件。我的意思是,快速没有DirectoryInfo.GetFiles,但是“快速从磁盘低级别获取集群”。
当然,.NET 2.0,c#
这里有类似的问题,但这种方法并不好:
C# Directory listing massive directory
有人在FindFirst / FindNext上建议了pInvoke。有人试过这个并且能够分享结果吗?
答案 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()
工作得更快,因为我们在那里省略了跨平台检查和调整。