优化长期运行的WebAPI方法

本文关键字:WebAPI 方法 运行 优化 | 更新日期: 2023-09-27 18:20:13

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

这做得正确吗?有什么方法可以进一步优化这个功能吗?

优化长期运行的WebAPI方法

您应该将客户端javascript更改为批处理调用,最好更改为单个请求。传递一个firstsecond值的数组,然后返回一个数组。

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

2) 对于同时连接,您将达到每个服务器(或每个配置文件)的浏览器限制。

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

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