2011-02-07 89 views
2

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

+0

说实话,因为Windows是愚蠢的。 – 2012-08-04 13:26:37

回答

1

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

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

对于API的替代方法,我无法帮助,抱歉。

+0

这60秒用于响应完美的计算机并显示共享列表。什么“证书”问题可能会触发超时? – grigoryvp 2011-02-07 08:39:05

1

你可能想要尝试一些东西,比如用Linux枚举相同的共享(你可以使用LiveCD)。在我的测试中,我看到路由器也被要求提供可能的网络共享(我的路由器运行Linux,这是我的ISP给我的,所以它可能很常见)。

因此,也许Windows会长时间询问路由器是否有网络共享(这种情况不应该发生......),并等待它同步响应共享。

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