c# - AcquireRequestState 与 PreExecuteRequestHandler

标签 c# newrelic request-pipeline

我们在 AcquireRequestState 中获取了大量的 ajax 调用,花费了大量时间,在我们的旅行中,我们偶然发现了 ASP.Net 中的 session 锁定 gem,因此我们实现了一个自定义 session 状态处理程序(基于下面的链接) .

进行更改并部署后,我们看到 AcquireRequestState 急剧下降,但它已被 PreExecuteRequestHandler 取代。

今天早上我突然意识到我们已经包括了 OWIN,这可能是 PreExecuteRequestHandler 占用这么多时间的原因。然后我继续删除它,在我部署代码的那一刻,PreExecuteRequestHandler 从列表中消失了。可悲的是,它现在又被 AcquireRequestState 所取代,成本几乎完全相同。

我们似乎确实在返回部分 View 的 AJAX 调用上受到了相当大的打击,尽管吞吐量更高,但返回原始类型或 JSON 对象的 AJAX 调用似乎基本不受影响。

所以这给我留下了 3 个我绝对难以回答的问题,我认为一个问题的答案会引导我们找到另外两个问题的答案。

1) 为什么在安装 OWIN 时成本从 AcquireRequestState 转移到 PreExecuteEventHandler? OWIN 上是否标记为 IRequireSessionState? (据我了解,AcquireRequestState 应该更早出现在托管管道中)

2) 我们如何获得有关 AcquireRequestState 内部实际发生的事情的更多信息?或者我们的时间是否更好地用于返回 JSON 对象并使用它来呈现我们在 UI 上需要的内容?

3) 我们确实看到一些请求(虽然很少)映射到 New Relic 中的/{controller}/{action}/{id},然后在上面提到的请求期间完全卡住.尽管对我们的路由设置了限制以仅路由到我们在项目中拥有的 Controller 和操作,但这仍然存在。

附言: 这看起来确实与以下内容非常相似,我们在 New Relic 中也看到了这一点:long delays in AcquireRequestState

自定义 session 模块来自: I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it

最佳答案

如果有人试图排除我们最终面临的 session 问题,但仍然需要依赖 session 值(因此您不能只在 Controller 级别禁用 session ),请查看以下 session 状态提供程序:

https://github.com/aspnet/AspNetSessionState

请特别注意以下应用程序设置:

<add key="aspnet:AllowConcurrentRequestsPerSession" value="[bool]"/>

您需要升级到 .Net Framework 4.6.2,但在我们的例子中,这是一个很小的代价。

关于c# - AcquireRequestState 与 PreExecuteRequestHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42300438/

相关文章:

c# - 为什么 ASP.NET Core 在中间件管道的末尾返回 404?

python - python(django)请求究竟是如何发生的?它必须重新解析所有代码库吗?

asp.net-core-2.0 - 如何编写中间件来测量asp.net core 2.0中请求处理时间

c# - 从 C# .NET 中启动 R 图形

c# - 什么是 HttpClient 的默认最大连接数

.net - 新遗迹在运行时更改应用程序名称.NET

ruby-on-rails - 将 New Relic 定位为仅在 1 个(共 3 个)应用服务器上运行

c# - 在下拉列表上使用 confirmbuttonextender 时出现重复值

c# - 模拟office365 API以使用单个帐户执行日历相关操作

ruby-on-rails-3 - 如何将同一代码中的 New Relic 数据报告回不同的应用程序名称?