WebClient.DownloadFileAsync真的这么慢吗?

dav*_*nal 7 c# performance 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
Run Code Online (Sandbox Code Playgroud)

DownloadFileAsync当应用程序下载~100 MB文件时,我正在使用UI阻止阻止.显然,如果UI在呼叫开始时阻塞了3秒,那么即使不完全,也会稍微减少效用.

我对C#/ .Net相对缺乏经验(大约3 - 4年前我做了一堆.Net 2.0的东西,IIRC,但我现在基本上重新学习它).

Igo*_*ejc 8

除了Nav所说的,看起来问题是Web代理自动检测,请看这个答案:为什么这个WebRequest代码会变慢?

我测试了它,现在它在第一次通话时没有任何明显的延迟.


小智 7

我在某处读到了DownloadFileAsync实际上在阻塞线程中检查DNS名称,因此您可能会遇到减速的原因.如果直接放入IP,则不应该阻塞.在这里找到这条信息:http://www.csharp-examples.net/download-files/


fer*_*oze 0

您是否弄清楚延迟是在您的应用程序中还是在网络中?要查明目标服务器是否缓慢,请运行 Wireshark 并查看发送请求后何时收到第一个响应。也许这就是延迟发生的地方?

此外,如果这是大型应用程序的一部分,那么由于启动成本,第一次总是会很慢。如果您确实想获得良好的测量结果,请测量第一次调用以及第二次到第十次调用所需的总时间。由此您可以了解延迟是否是启动成本所致,还是每次都如此。