【问题标题】:Async WebClient is so slow?Async WebClient 这么慢?
【发布时间】:2013-05-02 22:57:45
【问题描述】:

我在玩最简单的用法bcl.async in wp7

private async void loadButton_Click1(object sender, RoutedEventArgs e)
{
        var client = new WebClient(); 
        string response = await client.DownloadStringTaskAsync(new Uri("myurl"));
        Debug.WriteLine(response);
}

所以,我在第一行和最后一行都有断点,在设备上以调试模式运行。有时需要大约 5 秒才能得到答案(这很奇怪),但有时几乎需要一分钟。在来自设备的 1 个请求期间,我能够在浏览器中检查请求(获得即时答复,不到一秒),喝了点茶,然后检查 9gag。

我可以假设我的网络不好,但是浏览器的请求是光速的,所以这不是问题。另外,我尝试了 RestSharp,但遇到了同样的问题。非异步 WebClient 调用工作正常。

编辑: 快速解决方案:您要做的第一件事就是重启设备。

【问题讨论】:

  • 我建议使用已知的 url(例如http://www.google.com)进行测试——只是为了确保问题出在您的代码中。之后,我会尝试使用老式异步 Web 请求(不使用 asyncawait)——再次确认一下。
  • 尝试使用以下链接 [1] [1] 中的此建议:stackoverflow.com/questions/4932541/…
  • @Uzzy 听起来不错,但 wp 没有 Proxy 属性。
  • @YoryeNathan 刚刚在 google.com 上尝试了相同的代码,在 5-7 秒内得到答案。
  • @VitaliiVasylenko 试试我的其他建议。此外,如果您并不真正关心下载的进度,您可以通过简单的线程自己管理它的异步性,从而避免使用异步方法。

标签: c# windows-phone-7 async-await base-class-library


【解决方案1】:

正如我在评论中提到的,我认为值得研究使用 HttpClient 而不是 WebClient。 HttpClient 较新,并且在设计时考虑了新的 WebAPI,我相信它的设计通常可以提高效率。

here 列出了一个很好的比较。

【讨论】:

  • 感谢比较表,但看起来像HttpClient is not avaivable in wp7。还有HttpWebRequest,和你说的一样吗?
  • 确实,HttpClient 在后台使用了HttpWebRequestHttpWebResponse。我没有花时间看 WP7 的东西,所以我为我的疏忽道歉。
  • HttpWebRequest有所了解(最后回复)
  • 是的,但仍需要进行更多测试。此外,here 是关于使用异步 HttpWebRequest 的不错(并且是最新的)示例
  • 听起来合法,但我在那个项目中没有代码 :) 只是一个干净的 WP 7 项目 + bcl.async。我只考虑硬件问题:未格式化的驱动器或类似的废话。我也尝试了发布模式,所以我认为它的设备硬件问题。
猜你喜欢
  • 2011-10-22
  • 2014-08-14
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多