为什么网络共享枚举在Windows上如此之慢?

时间:2011-02-07 08:30:05

标签: winapi smb

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您可能想要尝试一些事情,即使用Linux枚举相同的共享(您可以使用LiveCD)。在我的测试中,我已经看到路由器也被要求可能的网络共享(我的路由器运行Linux,这是我的ISP给我的,所以它可能很常见)。

因此,也许Windows长时间要求路由器获取网络共享(这不应该发生......)并且同步等待它回应共享。

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