【问题标题】:Why network shares enumeration is so slow on Windows?为什么网络共享枚举在 Windows 上这么慢?
【发布时间】:2011-02-07 08:30:05
【问题描述】:

通过 Windows API 函数 NetShareEnum 或 WNetEnumResource 检索网络共享列表最多需要 60 (!!!) 秒来完成请求。也许有人知道为什么它这么慢?也许可以使用一些 API / 库(如 SMB)以合理的速度枚举共享?

【问题讨论】:

    标签: winapi smb


    【解决方案1】:

    至于为什么这么慢,如果主机不可用或由于任何原因(例如需要登录凭据)没有响应,Windows 将等待超过超时限制,对于网络中已知的每个共享 (每个主机可以是多个)。 Windows 的默认超时时间非常长。

    将超时时间减少到 50 毫秒(在 LAN 中永远不应超过)可能会有所帮助,最终取决于测试的主机数量。

    对于 API 的替代方案,我无能为力,抱歉。

    【讨论】:

    • 这 60 秒适用于响应完美并显示共享列表的计算机。触发超时的“凭据”问题可能是什么?
    • 如果任何共享需要登录信息并且 Windows 没有将其保存在某处,我不确定它是否会继续尝试匿名登录或是否会简单地跳过它(这将是预期的行为,但 Windows 的网络方式在很多地方都很奇怪)。但是,如果您的主机响应非常好,我认为这不是我所说的。
    • 如何减少超时?
    【解决方案2】:

    您可能想尝试一些方法,即枚举与 L​​inux 相同的共享(您可以使用 LiveCD)。在我的测试中,我看到路由器还被要求提供可能的网络共享(我的路由器运行 Linux,这是我的 ISP 给我的,所以它可能很常见)。

    所以,也许 Windows 长时间向路由器请求网络共享(这不应该发生......)并同步等待它响应共享。

    (将这个 API 设计为同步的天才是谁?)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2010-11-12
      • 2011-12-06
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多