【问题标题】:WebClient.DownloadFile is taking way too long before sending the first requestWebClient.DownloadFile 在发送第一个请求之前花费的时间太长
【发布时间】:2011-06-10 17:21:33
【问题描述】:

我编写了一个非常简单的控制台应用程序,它只是使用以下代码下载文件:

System.Net.WebClient web = new System.Net.WebClient ();
web.DownloadFile ("http://www.google.com", "file.txt");

在我以前的开发机器上,这非常快。我一执行DownloadFile 方法,请求就通过了网络,很快就得到了响应。我使用 ProcMon 工具检查了这种行为。

然而,在切换到另一台机器之后,它恰好比我最初的开发机器强大得多,我注意到在调用DownloadFile 时大约 5-8 秒内什么都不会发生。使用浏览器访问相同的 URL 几乎会立即显示结果。

在花了几个小时研究这个问题,进入 .NET 源代码之后,我终于放弃了 System.Net.ServicePointManager.FindServicePoint,因为我觉得单步不再有意义,而且似乎需要一些代理解析。

我终于在 Internet 选项 对话框的 LAN 设置 对话框中关闭了自动检测设置,该对话框位于 Internet Explorer 8 中(I我正在运行 Windows 7 x64),没有设置复选框的对话框。这神奇地使一切都做得非常非常快。没有更多的延迟。

好吧,我找到了一种方法来规避我所观察到的问题,但如果有人能就我的代码可能有什么问题分享一些想法,我会很高兴。我可以通过某种方式配置WebClient 实例以某种方式达到相同的效果吗?

【问题讨论】:

    标签: .net proxy webclient downloadfile


    【解决方案1】:

    您是否尝试过明确设置代理?

    web.Proxy = new WebProxy();
    

    这基本上应该等同于说,“根本不要使用代理 - 甚至不要尝试。”

    【讨论】:

    • 一如既往,你让我吃惊!你是对的,添加一个空的 WebProxy 实例就可以了。没想到.NET提供的代理属性会被初始化。
    【解决方案2】:

    您是否尝试过设置 web.Proxy 属性?

    例如:

    System.Net.WebClient web = new WebClient();
    web.Proxy = new WebProxy("Address here");
    web.DownloadFile("http://www.google.com", "file.txt");
    

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      相关资源
      最近更新 更多