我有一个WebAPI函数,它执行循环计算以查找单个数值。
从我的客户端javascript,我为此单一页面加载同时发出约20个请求。我已通过Chrome的网络性能工具确认所有请求都是同时发出的,但请求会按顺序接收响应(初始请求需要0.2秒,后者最多需要8秒),因此服务器出现成为瓶颈。
我尝试通过将代码设置为异步来优化我的代码,但我不确定我是否正确执行了代码,或者它完全改善了性能。
[HttpGet]
public async Task<double> CalcResult(double First, double Second)
{
var result = await Task.Run(()=>LoopCalculationFunction(First,Second));
return result * 100;
}
这样做是否正确,有什么办法可以进一步优化这个功能吗?
答案 0 :(得分:4)
您应该将客户端javascript更改为批量调用,理想情况下是单个请求。传递一组first
和second
值并返回一个数组。
1)每次往返都很慢,你可以通过一次往返使它更快。
2)您将为同时连接点击浏览器的每服务器(或每个配置文件)限制。
3)这不适用于Task.Run
,请参阅http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html
4)如果您的总连接时间太长,您应该转到轮询API:发布计算请求,然后轮询进度和最终结果。