【发布时间】:2011-02-07 08:30:05
【问题描述】:
通过 Windows API 函数 NetShareEnum 或 WNetEnumResource 检索网络共享列表最多需要 60 (!!!) 秒来完成请求。也许有人知道为什么它这么慢?也许可以使用一些 API / 库(如 SMB)以合理的速度枚举共享?
【问题讨论】:
通过 Windows API 函数 NetShareEnum 或 WNetEnumResource 检索网络共享列表最多需要 60 (!!!) 秒来完成请求。也许有人知道为什么它这么慢?也许可以使用一些 API / 库(如 SMB)以合理的速度枚举共享?
【问题讨论】:
至于为什么这么慢,如果主机不可用或由于任何原因(例如需要登录凭据)没有响应,Windows 将等待超过超时限制,对于网络中已知的每个共享 (每个主机可以是多个)。 Windows 的默认超时时间非常长。
将超时时间减少到 50 毫秒(在 LAN 中永远不应超过)可能会有所帮助,最终取决于测试的主机数量。
对于 API 的替代方案,我无能为力,抱歉。
【讨论】:
您可能想尝试一些方法,即枚举与 Linux 相同的共享(您可以使用 LiveCD)。在我的测试中,我看到路由器还被要求提供可能的网络共享(我的路由器运行 Linux,这是我的 ISP 给我的,所以它可能很常见)。
所以,也许 Windows 长时间向路由器请求网络共享(这不应该发生......)并同步等待它响应共享。
(将这个 API 设计为同步的天才是谁?)
【讨论】: