我们在 AcquireRequestState 中花费大量时间处理了大量的 ajax 调用,在旅行中我们偶然发现了 ASP.Net 中的会话锁定 gem,因此我们实现了一个自定义会话状态处理程序(基于下面的链接)。
在进行更改并部署后,我们看到 AcquireRequestState 急剧下降,但它已被 PreExecuteRequestHandler 取代。
今天早上我突然意识到我们已经包含了 OWIN,这可能是 PreExecuteRequestHandler 占用这么多时间的原因。然后我继续删除它,在我部署代码的那一刻,PreExecuteRequestHandler 从列表中消失了。可悲的是,它现在再次以几乎完全相同的成本被 AcquireRequestState 取代。
尽管吞吐量更高,但我们似乎确实在返回 Partial 视图的 AJAX 调用、返回原始类型或 JSON 对象的 AJAX 调用上受到了很大的影响。
因此,这给我留下了 3 个问题,我完全被难住了,我认为其中一个的答案会引导我们找到另外 2 个的答案。
1) 为什么在安装 OWIN 时,成本会从 AcquireRequestState 转移到 PreExecuteEventHandler?OWIN 上是否有标记为 IRequireSessionState 的内容?(据我了解,AcquireRequestState 应该在托管管道中更早发生)
2) 我们如何获得更多关于 AcquireRequestState 内部实际情况的信息?或者我们的时间是否更好地用于返回 JSON 对象并使用它在 UI 上呈现我们需要的内容?
3)我们确实看到了一些映射到 New Relic 中的 /{controller}/{action}/{id} 的请求(尽管很少),然后在上述请求期间完全卡住了。尽管对我们的路由设置了限制,仅路由到我们在项目中拥有的控制器和操作。
PS:这似乎与以下非常相似,我们也在 New Relic 中看到了这一点:AcquireRequestState 中的长时间延迟
来自的自定义会话模块: 我刚刚发现为什么所有 ASP.Net 网站都很慢,我正在尝试解决此问题