我正在使用WebClient的DownloadFileAsync方法从服务器下载一些文件,我不禁注意到,在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当应用程序下载一个大约100MB的文件时,我使用DownloadFileAsync来防止UI阻塞。显然,如果UI在调用开始时阻塞3秒,即使不是完全的,也会在一定程度上减少实用程序。
我对C#/.Net相对缺乏经验(我在大约3-4年前做了一些.Net 2.0的东西,但我现在基本上是在重新学习它)。
发布于 2010-09-27 02:47:25
除了Nav所说的之外,看起来问题是web proxy自动检测,请参阅此答案:Why is this WebRequest code slow?
我对它进行了测试,现在它在第一次调用时没有任何明显的延迟。
发布于 2010-06-25 10:12:52
我在某处读到,DownloadFileAsync实际上会在阻塞线程中检查DNS名称,这就是为什么你可能会变慢的原因。如果直接放入IP,应该不会被封堵。在这里找到了这条信息:http://www.csharp-examples.net/download-files/
发布于 2010-06-17 09:12:47
你有没有弄清楚延迟是在你的应用程序中,还是在网络上?要查明目标服务器是否运行缓慢,请运行Wireshark并查看在发送请求后何时收到第一个响应。也许这就是延迟发生的地方?
此外,如果这是一个大型应用程序的一部分,那么由于启动成本的原因,第一次总是会很慢。如果你真的想要得到一个好的测量,测量第一次调用所需的总时间,以及第二次到第十次调用所需的总时间。从这里你可以发现延迟是在启动成本上,还是每次都是。
https://stackoverflow.com/questions/2972969
复制相似问题