【问题标题】:Directory.EnumerateDirectories() hang on some network foldersDirectory.EnumerateDirectories() 挂在某些网络文件夹上
【发布时间】:2015-10-09 11:04:16
【问题描述】:

我有这个简单的 C# 代码:

foreach (string s in Directory.EnumerateDirectories(root))
{
    Console.WriteLine(s);
}

root 是包含 10520 个文件且无子文件夹的网络共享 (Windows) 的字符串 (UNC)。我希望Directory.EnumerateDirectories(root) 返回一个空集合,但它挂起。我已经等了几分钟了。

DOS 命令“dir”按预期工作,甚至 Windows 资源管理器中的“属性”在 5 秒内完成任务,报告“10 520 个文件,0 个文件夹”

我的猜测是文件服务器或我的计算机上有一些限制。

【问题讨论】:

    标签: c# windows-server


    【解决方案1】:

    问题很可能与 .net 本身有关。有时(如果不是总是)它比原生 Windows API 慢。

    命令行和资源管理器正在使用 WinAPI,这就是它们如此快速的原因。

    幸运的是,可以使用 P/Invoke 通过 C# 调用 WinAPI。

    有很多例子,比如this

    【讨论】:

    • .Net 比 WinAPI 慢很多不是很奇怪吗?我的意思是,自海湾战争以来,我一直在使用 WinAPI 编写 C 和 C++,如果我被要求移植或包装 FindFirstFile/FindNextFile,我会使用 WinAPI 并返回一个 IEnumerable,就像在 ieaglle 提供的 URL 中一样.一些 .Net 设计师显然添加了一些安全代码,使其变慢。我还必须提到,慢速/挂起场景并不适用于服务器上的每个目录。可能只是大的。
    • 利益总是有代价的
    • 接受答案,虽然我不喜欢它;-) 使用 P/Invoke 修复框架对我来说听起来不太好。无论如何...谢谢!
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多