Почему перечисление сетевых ресурсов происходит так медленно в Windows? - PullRequest
2 голосов
/ 07 февраля 2011

Получение списка общих сетевых ресурсов с помощью функций Windows API NetShareEnum или WNetEnumResource занимает до 60 (!!!) секунд для выполнения запроса. Может, кто-то знает, почему это так медленно? Может быть, можно использовать API / библиотеку (например, SMB) для перечисления общих ресурсов с нормальной скоростью?

Ответы [ 2 ]

1 голос
/ 04 августа 2012

Есть кое-что, что вы можете попробовать: перечислить те же общие ресурсы с Linux (вы можете использовать LiveCD).В моем тесте я видел, что маршрутизатору также задают вопрос о возможных сетевых ресурсах (мой маршрутизатор работает под управлением Linux, и это было то, что мне дал мой провайдер, так что это может быть обычным явлением).запрашивать маршрутизатор о сетевых ресурсах в течение длительного времени (что не должно происходить ...) и синхронно ждать, пока он ответит общими ресурсами.

(Кто был гениальным, который разработал этот API, чтобы быть синхронным?)

1 голос
/ 07 февраля 2011

Что касается того, почему это так медленно, если хост недоступен или не отвечает по какой-либо причине (например, требуются учетные данные для входа в систему), Windows будет ожидать превышения лимита времени ожидания для каждого общего ресурса, известного в сети ( который может быть несколько на хост). Таймауты Windows по умолчанию слишком велики.

Здесь может помочь сокращение времени ожидания до 50 мс (которое никогда не должно превышаться в локальной сети), в конечном итоге это зависит от количества протестированных хостов.

Не могу помочь с альтернативами API, извините.

...