【问题标题】:Xamarin.Forms - HttpClient GetAsync or PostAsync sometimes takes too longXamarin.Forms - HttpClient GetAsync 或 PostAsync 有时需要太长时间
【发布时间】:2022-01-08 10:33:18
【问题描述】:

我正在使用 Xamarin.Forms 并且我正在使用 HttpClient GetAsync 和 PostAsync 来调用 api,我的问题是客户端在调用 api 时抱怨应用程序太慢。无论如何我可以加快这个过程,还是有另一种更快的方法来调用 api?这是一个示例方法:

public async Task<List<SubCatClass>> GetSubCategories(int category)
        {
            var client = new HttpClient();

            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("category", category.ToString())
            });

            var response = await client.PostAsync(string.Format("https://exmample.com/api/index.php?action=getSubCategories"), content);

            var responseString = await response.Content.ReadAsStringAsync();

            List<SubCatClass> items = JsonConvert.DeserializeObject<List<SubCatClass>>(responseString);

            return items;

        }

我是这样称呼它的。

await webService.GetSubCategories(item.categoryid);

我可以完全控制代码 (PHP) 和服务器的 api。

任何帮助将不胜感激。

提前致谢。

更新

我在 postman 中调用了 api,结果如下

【问题讨论】:

  • “调用 api 时速度太慢”是对问题的无用描述。 “太”慢有多慢?它一直很慢吗?还是只是有时?他们使用的是 WiFi 还是手机?他们的网络有多好?请求/响应有多大?服务器是否在一些糟糕的共享主机上运行?您是否正在监视服务器的响应能力?如果我是你,我要做的第一件事就是让我的应用程序收集关于“太慢”意味着什么的硬数据,并确保我在服务器上设置了监视器以将客户端请求与相关联。
  • 我正在使用 hostgator 共享主机,它一直很慢,他声称的每个请求大约需要 10 秒,我会说最多 5-7 秒。他们正在使用屏幕截图中的 Wifi,我看到了完整的条形图。
  • 刚刚更新了我的问题
  • 是的,使用 Stopwatch 类或类似的东西来确定代码的哪一部分是慢的。您假设它是 PostAsync 但您没有任何证据。查看对应的服务器日志,了解服务器响应需要多长时间。
  • 一个问题是你不应该在每次调用时创建一个 HttpClient。这种方式会导致套接字耗尽。创建一个 HttpClient 并重用它。 async/await 是一种更有效的通信方式,非 async/await 版本将需要同样长的时间才能完成。

标签: c# xamarin.forms


【解决方案1】:

您可以尝试使用ModernHttpClient,它会比使用 Xamarin 的默认设置提高您的速度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多