Skip to main content
 首页 » 编程设计

c#之优化长时间运行的 WebAPI 方法

2024年02月05日25kerrycode

我有一个 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:发布计算请求,然后轮询进度和最终结果。