WebClient. DownloadFileAsync действительно это замедляется?

Я использую DownloadFileAsync метод WebClient для загрузки некоторых файлов с сервера, и я не могу не заметить, что в моем неофициальном тестировании моего кода в VS2010, он блокируется в течение приблизительно 3 секунд, в то время как он запускается, который, по-моему, вид поражений цель во-первых.

Вот соответствующий отрывок кода:

WebClient downloader = new WebClient();
downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(updateDownloadProgress);
downloader.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(downloadCompleted);

var current_map = map_downloads[0];//string with filename, map_downloads is List<string>

var path = System.IO.Path.GetTempFileName();

downloaded_maps.Add(path);//adding the temp file to a List<string>

downloader.DownloadFileAsync(new Uri(MAP_BASE + current_map), path); //MAP_BASE is a string containing the base url

Я использую DownloadFileAsync помешать UI блокироваться в то время как загрузки приложений файл на ~100 МБ. Очевидно, если блоки UI в течение 3 секунд, в то время как вызов запускается, который уменьшает утилиту несколько, если не полностью.

Я относительно неопытен с C#/.Net (я сделал набор материала.Net 2.0 приблизительно 3-4 года назад, IIRC, но я в основном повторно изучаю это теперь).

7
задан davidtbernal 4 June 2010 в 09:43
поделиться

2 ответа

Вы выяснили, где задержка - в вашем приложении или в сети? Чтобы узнать, работает ли целевой сервер медленно, запустите Wireshark и посмотрите, когда будет получен первый ответ после отправки запроса. Может быть, именно здесь происходит задержка?

Кроме того, если это часть большого приложения, то первое время всегда будет медленным из-за затрат на запуск. Если вы действительно хотите получить хорошее измерение, измерьте общее время, необходимое для 1-го вызова и для 2–10-го вызовов. Из этого вы можете узнать, связана ли задержка с начальными затратами или каждый раз.

0
ответ дан 6 December 2019 в 15:19
поделиться

Я где-то читал, что DownloadFileAsync фактически проверяет DNS-имя в блокирующем потоке, поэтому вы можете получить замедление. Если вы вводите IP напрямую, то блокировки быть не должно. Нашел эту информацию здесь: http://www.csharp-examples.net/download-files/

7
ответ дан 6 December 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: