2014-01-08 96 views
6

我的MVC控制器出現了一些奇怪的性能問題,或者說在它之前?什麼[ASP.net] MVC做我的控制器之前?

根據Mini Profiler輸出,在到達控制器之前有120ms的開銷。

有誰知道這是爲什麼?這是在服務器上(不是本地),它有Compilation debug=false集,所以它不是在release模式下沒有運行的問題。

之後的一切,我可以調整/修改,但在它之前呢?我迷失了..

想法??

enter image description here

更新

後,我整個enter link description here & enter link description here來到一些性能工具這就造成了如下:

最貴棧 -------- ---------------------------- 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 ===>費用(1716011)

Microsoft.Pra ctices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp 微軟。 Practices.ObjectBuilder2.BuilderContext.NewBuildUp Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp 微軟。 Practices.ObjectBuilder2.StrategyChain.ExecuteBuildU p 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 系統。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 ===>費用(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.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 系統.Web.Hosting.PipelineRuntime.ProcessRequestNotification ===>成本(780005)

能團結是造成一些問題?

+0

這是否延遲發生與其他控制器太或者只有這個延遲? – Alex

+0

它只發生在這個特定的控制器上,我的另一個控制器調用相同的BL(這和其他周邊邏輯)相比要快得多! –

+0

我看到了...我期待一致的行爲,並且要指向服務器本身,但是現在我處於虧損狀態 – Alex

回答

0

我爲我的英語

有很多
1.Application_BeginRequest(和AuthenticateRequest)在全球或某些HTTP模塊
2.filters
3.mvc框架,控制器工廠,行動調用和難過上
4。當第一次運行,它的成本很多編譯IL到本地

我認爲你可以使用一個秒錶來檢查你的動作的代碼花多少時間
這樣就可以找出其中的點採取多少時間

120毫秒不運行動作前花費的時間,我覺得是時候行動的方式爲120ms做

是不是太糟糕

更新

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

enter image description here
這個PIC是上面的代碼運行的結果 所以你可以看到
行動是孩子成本只有1.9
和http:// ......耗資302,它包括控制器,行動

所以你應該在PIC檢查你內心操作代碼或外部您的操作代碼
大部分時間成本,它的成本300多,因爲它是第一個跑,第二次運行是剛剛耗資40
第一次運行一定要慢

+0

正如Profiler所示,這是在我的代碼之前發生,所以我不能秒錶。 –

+0

不是 - 這不是第一次運行,它不是我的動作代碼,這是問題所在,正如您從我的照片中看到的,我的代碼在20ms時運行得很好,問題在於HTTP。 –

1

您應該對The ASP.NET MVC Pipeline

的ASP.NET MVC管道可分爲以下幾個部分來看看 -

  • App initialisation - n這個方法,你可以添加路由對象的靜態RouteTable.Routes集合(其類型爲RouteCollection)。

  • Routing Part - 路由模塊嘗試將傳入的URL與 路由表匹配,並調用相應的IRouteHandler。

  • Controller creation - 基於路由參數以及默認命名 約定IControllerFactory創建的 控制器的一個實例。

  • Action Execution - 所述IActionInvoker識別方法是 執行時,IModelBinder驗證並結合所述方法參數 和IFilterProvider發現可應用的過濾器。動作 返回一個類型ActionResult。

  • View - IViewEngine實例化正確的視圖引擎,並將 模型傳遞給視圖。使用模型驗證提供者, 驗證規則被檢索到創建客戶端驗證 腳本以及遠程驗證腳本

獲取更多信息:

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

你認爲這可能是Unity導致一些問題? –