2011-02-07 14 views
2

Windows API関数を使用してネットワーク共有のリストを取得するNetShareEnumまたはWNetEnumResourceは、要求を完了するまでに最大60(秒)かかります。たぶん誰かがなぜそんなに遅いのか分かっていますか?おそらく、SMBのようなAPI /ライブラリを使用して、正当な速度で共有を列挙することは可能でしょうか?Windowsでネットワーク共有の列挙が遅いのはなぜですか?

+0

Windowsは愚かですので、正直です。 –

答えて

1

理由が何であれ(たとえばログイン資格情報を必要とする)ホストが利用できない場合や応答しない場合、Windowsはネットワーク内のすべての共有についてタイムアウト制限を超過するのを待ちます(ホストごとに複数の場合があります)。 Windowsのデフォルトのタイムアウトは非常に長いです。

タイムアウトを50ms(これはLANで超過してはならない)に減らすと、最終的にテストされるホストの量に依存します。

APIに代わる選択肢についてはお手伝いできません。申し訳ありません。

+0

この60秒は、完璧に応答しているシェアのリストを表示するコンピュータのためのものです。タイムアウトが発生する可能性のある「資格情報」の問題 – grigoryvp

+0

共有にログイン情報が必要で、Windowsに保存されていない場合は、匿名でログインしようとしているかどうか、または単純にスキップするかどうかはわかりません(予想される動作ですが、Windowsのネットワーク方法は奇妙です)。あなたのホストが完璧に罰金を返せば、私はそれが私が言ったことのいずれかだとは思わない。 – pdinklag

1

試してみたいことがあります。これは、Linuxと同じ共有を列挙することです(LiveCDを使用できます)。私のテストでは、ルーターも可能なネットワーク共有を求められているのを見ました(私のルーターはLinuxを実行していて、私のISPが私に与えたものなので一般的かもしれません)。

多分、Windowsはルータにネットワーク共有を求めています(これは起こるべきではありません...)。そして、それが共有で応答するために同期的に待っています。

(このAPIを同期させるように設計した人は誰ですか?)

関連する問題