繁体   English   中英

什么[ASP.net] MVC在我的控制器之前做什么?

[英]Whats [ASP.net]MVC doing BEFORE my controller?

我的MVC控制器出现了一些奇怪的性能问题,或者更确切地说是之前的问题?

根据Mini Profiler输出,在到达我的控制器之前有120ms的开销。

有谁知道为什么会这样? 这是在服务器(非本地)上,具有Compilation debug=false set,因此不存在未在release模式下运行的问题。

在它之后的一切,我可以调整/修改,但在此之前? 我迷路了..

思考?

在此输入图像描述

更新

经过一些性能工具后,我偶然在这里 输入链接描述并在 此处 输入链接描述 ,结果如下:

最昂贵的堆栈------------------------------------ System.Web.HttpApplication + CallHandlerExecutionStep.System.Web .HttpApplication.IExecutionStep.Execute System.Web.HttpApplication.ExecuteStep System.Web.HttpApplication + PipelineStepManager.ResumeSteps System.Web.HttpApplication.BeginProcessRequestNotification System.Web.HttpRuntime.ProcessRequestNotificationPrivate System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper System.Web.Hosting .PipelineRuntime.ProcessRequestNotification System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper System.Web.Hosting.PipelineRuntime.ProcessRequestNotification ===> Cost(1716011)

Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp Microsoft.Practices.ObjectBuilder2 .BuilderContext.NewBuildUp Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp Microsoft .Practices.Unity.UnityContainer.DoBuildUp Microsoft.Practices.Unity.UnityContainer.DoBuildUp System.Web.Mvc.DefaultControllerFactory + DefaultControllerActivator.Create System.Web.Mvc.DefaultControllerFactory.CreateController System.Web.Mvc.MvcHandler.ProcessRequestInit System.Web。 Mvc.MvcHandler + < > c__DisplayClass6.b__2 System.Web.Mvc.SecurityUtil + <> c__DisplayClassb`1.b__a System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust System.Web.HttpApplication + CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute System.Web.HttpApplication。 ExecuteStep System.Web.HttpApplication + PipelineStepManager.ResumeSteps System.Web.HttpApplication.BeginProcessRequestNotification System.Web.HttpRuntime.ProcessRequestNotificationPrivate System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper System.Web.Hosting.PipelineRuntime.ProcessRequestNotification System.Web.Hosting.UnsafeIISMethods。 MgdIndicateCompletion System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper System.Web.Hosting.PipelineRuntime.ProcessRequestNotification ===> Cost(936006)

Microsoft.Win32.Win32Native.CoCreateGuid StackExchange.Profiling.Timing..ctor StackExchange.Profiling.MVCHelpers.ProfilingViewEngine.Find System.Web.Mvc.ViewEngineCollection + <> c__DisplayClassc.b__a System.Web.Mvc.ViewEngineCollection.Find System.Web.Mvc .ViewEngineCollection.Find System.Web.Mvc.ViewResult.FindView System.Web.Mvc.ViewResultBase.ExecuteResult System.Web.Mvc.ControllerActionInvoker + <> c__DisplayClass1c.b__19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter System.Web.Mvc.ControllerActionInvoker .InvokeActionResultFilter System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters System.Web.Mvc.ControllerActionInvoker.InvokeAction System.Web.Mvc.Controller.ExecuteCore System.Web.Mvc.ControllerBase.Execute System.Web.Mvc.MvcHandler + <> c__DisplayClass6 + <> c__DisplayClassb.b__5 System.Web.Mvc.Async.AsyncResultWrapper + <> c__DisplayClass1.b__0 System.Web.Mvc.MvcHandler + <> c__DisplayClasse.b__d System.Web.HttpApplication + CallHandlerExecutionStep.System.Web.HttpA pplication.IExecutionStep.Execute System.Web.HttpApplication.ExecuteStep System.Web.HttpApplication + PipelineStepManager.ResumeSteps System.Web.HttpApplication.BeginProcessRequestNotification System.Web.HttpRuntime.ProcessRequestNotificationPrivate System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper System.Web.Hosting。 PipelineRuntime.ProcessRequestNotification System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper System.Web.Hosting.PipelineRuntime.ProcessRequestNotification ===> Cost(780005)

团结会导致一些问题吗?

您应该看看The ASP.NET MVC Pipeline

ASP.NET MVC Pipeline可以分为以下几个部分 -

  • App initialisation - 在此方法中,您可以将Route对象添加到静态RouteTable.Routes集合(其类型为RouteCollection)。

  • Routing Part - 路由模块尝试将传入的URL与路由表进行匹配,并调用相应的IRouteHandler。

  • Controller creation - IControllerFactory根据路由参数和默认命名约定创建控制器实例。

  • Action Execution - IActionInvoker标识要执行的方法,IModelBinder验证并绑定方法参数,IFilterProvider发现要应用的过滤器。 Action返回一个ActionResult类型。

  • View - IViewEngine实例化正确的视图引擎,并将模型传递给视图。 使用模型验证提供程序,检索验证规则以创建客户端验证脚本以及远程验证脚本

更多信息:

http://blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/

我很抱歉我的英语

有许多
1.Application_BeginRequest(和AuthenticateRequest)在全局或一些HttpModule中
2.filters
3.mvc框架,控制器工厂,动作调用程序等
4.第一次运行时,将il编译为本机需要花费很多

我认为您可以使用秒表来检查您的操作代码花费的时间
这样你就可以找出需要花费很多时间的地方

120ms不是运行前花费的时间,我认为是行动完成的时间

顺便说一下120ms并不算太糟糕

更新

public ActionResult Index()
{
    var profiler = MiniProfiler.Current;
    using (profiler.Step("action"))
    {
        return View();
    }
}

在此输入图像描述
这张图片高于代码运行结果,所以你可以看到
行动是一个孩子只需1.9
和http:// ......成本302,它包括控制器,动作

所以你应该检查你的动作代码或动作代码之外的大部分时间成本
在图片中,它花费300+,因为它是第一次运行,第二次运行只需4次
第一轮必须慢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM