什么是System.Web.Mvc.MvcHandler.ProcessAsyncRequest()?

Ore*_*zor 8 .net iis asp.net-mvc

我正在NewRelic中进行一些跟踪,我看到几乎每个请求都包含对'System.Web.Mvc.MvcHandler.ProcessAsyncRequest()'的调用.

此函数调用可能需要300毫秒到100秒(严重的是100秒).我试图搜索msdn文档,但在http://msdn.microsoft.com/en-us/library/system.web.mvc.mvchandler.aspx上没有任何内容

显然,这里有些东西在骗我.

我有一些理论说明为什么这么长时间:

  • 类型推断?我正在使用结构图.

  • 服务器资源问题?

  • .net版本不兼容某种?

  • asp.net mvc某种不兼容性?

环境:

.net 4

asp.net mvc 3

专用的vm

daz*_*ury 4

当我发现这个问题时,我和@garfbradaz 的想法一样,并查看了 MVC 源代码。这很有趣,因为我没有找到该方法的参考ProcessAsyncRequest

因此,我认为这可能是 New Relic 注入的东西,或者正如你所说,这是转移注意力的东西,有东西在欺骗我们!我关闭了 New Relic,并联系了他们的支持团队。

今天,在 New Relic 团队一位反应迅速且彬彬有礼的成员发了几封电子邮件后,他们回复了我并确认这是一个(某种意义上的)错误。以下是他们的回应:

ProcessAsyncRequest 是一个自定义名称,我们用于记录的任何不是/不继承自“System.Web.UI.Page”的指标。鉴于 MVC 视图引擎使用“System.Web.Mvc.ViewPage”,所有这些指标都将错误地属于 New Relic 名称“ProcessAsyncRequest”。

我将致力于对代理和核心仪器进行修改,希望能够适当地聚合这些指标。对于由此给您带来的困惑和麻烦,我深表歉意。

当我接近解决方案时,我会向您提供最新信息。

编辑:下面来自 New Relic 的进一步回应 - 看起来他们已经修复了。

我刚刚推送了一个提交,它将帮助我们更好地对来自已安装代理的事务进行分类。

就性能问题而言,我们确实发现了 AppHarbor 出色的工程师报告的一个问题,该问题导致 TypeLoadExceptions,这可能与放入缓存的加载/编译代码缓慢有关。我们已经找到了原因,并且正处于该修复的最后测试阶段,我们希望在代理的下一个版本中得到修复。

New Relic 的 Nick 对此做出了出色的回应,他们的产品非常有用,所以我没有任何不好的感觉,只是想在这里分享详细信息。

很高兴发现我的 MVC 应用程序中没有幽灵!

目前,我对遇到这些问题的人的建议是关闭 New Relic,直到下一个版本发布。

编辑 2:New Relic 的 Nick 今天给我发了电子邮件 - 他们最新的代理(版本 2.0.9.15) - 现已可用,应该可以解决此问题。