【发布时间】:2018-01-24 09:36:03
【问题描述】:
我有一个 ASP.NET 站点,它正在运行适量的请求(大约 500rpm 分散在 3 台服务器上),通常请求大约需要 15 毫秒。但是,我发现经常有一些请求需要更长的时间(1 秒或更多)。我已将延迟缩小到对Task.WhenAll 的调用。这是违规代码的示例:
var taskA = dbA.GetA(id);
var taskB = dbB.GetB(id);
var taskC = dbC.GetC(id);
var taskD = dbD.GetD(id);
await Task.WhenAll(taskA, taskB, taskC, taskD);
每个单独的任务都经过测量,完成时间不到 10 毫秒。我已经将延迟确定为Task.WhenAll 调用,这似乎与任务的安排方式有关。据我所知,TPL任务池的压力并不大,所以我不知道为什么性能如此零星。
【问题讨论】:
-
我会尝试使用嗅探器,看看互联网上的时间间隔是否与应用程序中的间隔相关。
-
我已将其归结为对 TPL 的调用。单独的网络请求被测量并且永远不会超过 10 毫秒。正在进行中。
-
@EricAndres 抱歉,这是题外话,但出于我自己的好奇心:您使用什么工具得出这样的结论?
-
我们正在使用 Stopwatch.StartNew 进行测量,然后将它们发送到 Influx 数据库。
-
您测量的是
Task.WhenAll还是await Task.WhenAll?因为你会测量非常不同的东西
标签: c# asp.net-mvc task-parallel-library