【问题标题】:Why is HttpClient's GetStringAsync is unbelivable slow?为什么 HttpClient GetStringAsync 慢得令人难以置信?
【发布时间】:2013-11-21 21:46:20
【问题描述】:

我有一个 Windows Phone 8 项目,我也开始使用 PCL(可移植类库)项目,因为我要构建一个 Win8 应用程序。

但是,在调用我的 api(在 Azure 中)时,我的 HttpClient 的 GetStringAsync 非常慢。我用 datetime 进行了几次调试,GetStringAsync 花了大约 14 秒!有时需要更长的时间。

我正在做的是从我的 Azure API 站点检索简单的 JSON。我的 Android 客户端没有在瞬间获取相同数据的问题......所以我缺少什么吗?

设置非常简单:

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("X-Token", "something");
string responseJSON = await client.GetStringAsync("url");

我已经在 await 之前和之后放置了调试时间,中间是 14 秒!

有人知道为什么吗?

【问题讨论】:

  • 你在调用堆栈中调用了其他异步方法吗?你总是await他们吗?有时,一个缓慢的应用程序意味着您在某处使用.Result 而不是awaiting。例如string responseJSON = client.GetStringAsync("url").Result;.
  • 你的 Uri 返回的字符串有多大?如果速度差异很大,您是否尝试过在 WP8 上使用 WebClient?单纯在浏览器中使用,响应速度如何?
  • @chue x 我正在等待所有这些,但目前我只是在运行那个。尝试使用。结果需要永远!
  • @Martin Suchan 字符串为 2,99 KB“大”。我有一个带有 WebClient 的普通 WP8 项目,它工作正常!为什么不在 PCL 中使用 HttpClient?
  • 您在 3 年前问过这个问题,但我今天遇到了这个确切的问题。你找到解决方案了吗?

标签: c# windows-phone-8 async-await portable-class-library


【解决方案1】:

将 GetStringAsync 替换为 GetString 以确保它实际上是 async\await 导致您的问题,而不是堆栈中的任何其他内容。

【讨论】:

【解决方案2】:

我遇到了同样的问题,发现了这个问题。对我来说问题是 HttpClient 尝试使用代理,但对于大多数人来说,代理不存在。这就是让它变慢的原因。将初始化更改为以下内容,您会发现速度明显加快。

HttpClientHandler hch = new HttpClientHandler();
hch.Proxy = null;
hch.UseProxy = false;

HttpClient client = new HttpClient(hch);

【讨论】:

    猜你喜欢
    • 2016-12-05
    • 2014-12-28
    • 2019-06-22
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2016-12-10
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多