上下文: 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秒)。 例如:
Client time vs. WebApiController time for real and empty response
所以我的问题是:消耗那个时间的IIS(或.NET)在哪里?
也许是Garbagge Collector? (对我们来说,10/15秒是GC的大量时间,但也许可能是这样吗?)。
或许压缩回复??? (500kb是非常小的花费这么多时间,不是吗?)
IIS中的一些我不知道的任务?任何帮助?
我已经分析了webapi RQ的管道,并且真诚地,不知道我们在哪里浪费了宝贵的时间。 (https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf)
有人知道如何衡量控制器返回后在.NET框架或IIS中发生的不同活动的时间吗?
提前感谢!
编辑: