代码之家  ›  专栏  ›  技术社区  ›  davidtbernal

webclient.downloadfileasync真的这么慢吗?

  •  7
  • davidtbernal  · 技术社区  · 14 年前

    我用的是 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
    

    我在用 下载文件异步 在应用程序下载大约100 MB的文件时防止UI阻塞。显然,如果在调用开始时ui阻塞了3秒,那么这会在一定程度上(如果不是完全)减少实用程序。

    我对c/.net相对缺乏经验(我在3-4年前做了一堆.net 2.0的东西,iirc,但我现在基本上正在重新学习)。

    4 回复  |  直到 14 年前
        1
  •  8
  •   Community nesinervink    7 年前

    除了nav说的,问题是 Web代理自动检测 ,请参见以下答案: Why is this WebRequest code slow?

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

        2
  •  7
  •   Nav    14 年前

    我在某个地方读到,downloadfileasync实际上是在一个阻塞线程中检查dns名称,因此您可能会得到减速的原因。如果直接输入IP,就不会出现阻塞。在这里找到了那条信息: http://www.csharp-examples.net/download-files/

        3
  •  0
  •   feroze    14 年前

    你知道延迟是在你的应用里,还是在网络上?要确定目标服务器是否慢,请运行wireshark并查看发送请求后何时收到第一个响应。也许这就是延迟发生的地方?

    另外,如果这是一个大型应用程序的一部分,那么由于启动成本的原因,第一次总是很慢。如果您真的想得到一个好的度量,那么可以度量第一次调用以及第二次到第十次调用所需的总时间。从中你可以知道延迟是在启动成本,还是每次。

        4
  •  -1
  •   Community nesinervink    7 年前

    在asp.net中,如果 线 AysNC方法需要角色。
    当我启动webclient async时,它总是在主线程完成时加入(在呈现aspx之前)。

    伟大的 关于该主题的文章: http://weblogs.asp.net/gunnarpeipman/archive/2010/09/07/making-asynchronous-calls-to-web-services-during-asp-net-page-processing.aspx

    enter image description here

    以下是关于它的其他信息: WebClient async callback not called in ASP.NET MVC