c# - IIS 在 .net webapi 响应中在哪里浪费时间?
问题描述
上下文:WebApiController 调用业务对象(这些业务对象创建并运行几个线程来处理来自不同提供者的数据),加入它们之后,webapi 格式化一些字段或添加另一个字段:这是我们典型的 webapi 控制器的骨架:
xxxxController: WebApiController
{
StopWatch timer.Start()
.
.
businessLogic //1.create cache of some tables (around 5000 rows, 5/10Mb.)
//2.create and run threads (10 aprox)
//2.1 every thread call external services via APIs
//3.wait the join of all threads.
.
.
timer.Stop()
log(timer.elapsedMilisecond)
}
在这里,一切都完美。控制器响应正确,数据正确,一切正常,但是,当我们开始测量时间以提高性能时,我们意识到我们在控制器内部测量的时间远小于测量的时间在客户端,我解释一下:
在控制器中测量的 AVG 为 30 秒。但在客户端(浏览器)中测量的经过时间约为 10-15 秒。更多的:
这不是由于下载时间(响应大小平均约为 500kb)
我们认为这不是由于序列化问题(我们的第一个失败赌注)(为了确保这一点,我们已经强制一些 3/6kb 的空响应,并且客户端中的经过时间比控制器时间多 10/15 秒)。例子:
真实和空响应的客户端时间与 WebApiController 时间
- 其他控制器遵循相同的框架(但缓存需求较少且并行线程运行),我们没有注意到 apiController elapsedTime 和客户端 elapsedTime 之间的显着差异(可能是几毫秒或 1 秒,差不多)
所以我的问题是:IIS(或 .NET)在哪里消耗这些时间?
也许是垃圾收集器??(对我们来说,10/15 秒对于 GC 来说是很多时间,但可能是这样吗?)。
也许压缩响应???(500kb 对于花费这么多时间来说是很小的,不是吗?)
IIS 中的一些我不知道的任务?有什么帮助吗?
我已经分析了一个 webapi RQ 的管道,并且真诚地,不知道我们在哪里浪费了宝贵的时间。(https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf)
有人知道如何测量控制器返回后在 .NET 框架或 IIS 中发生的不同活动的时间吗?
提前致谢!
编辑: