优化长时间运行的WebAPI方法

时间:2015-11-02 04:42:49

标签: c# asp.net-web-api async-await

我有一个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;
}

这样做是否正确,有什么办法可以进一步优化这个功能吗?

1 个答案:

答案 0 :(得分:4)

您应该将客户端javascript更改为批量调用,理想情况下是单个请求。传递一组firstsecond值并返回一个数组。

1)每次往返都很慢,你可以通过一次往返使它更快。

2)您将为同时连接点击浏览器的每服务器(或每个配置文件)限制。

3)这不适用于Task.Run,请参阅http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html

4)如果您的总连接时间太长,您应该转到轮询API:发布计算请求,然后轮询进度和最终结果。