【发布时间】: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