优化长期运行的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;
}
这做得正确吗?有什么方法可以进一步优化这个功能吗?
您应该将客户端javascript更改为批处理调用,最好更改为单个请求。传递一个first
和second
值的数组,然后返回一个数组。
1) 每次往返都很慢,你可以通过一次往返来使它更快。
2) 对于同时连接,您将达到每个服务器(或每个配置文件)的浏览器限制。
3) 这不是Task.Run
的适当用法,请参阅http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html
4) 如果您的总连接时间太长,您应该转到轮询API:发布计算请求,然后轮询进度和最终结果。