나는 끝났어. Visual Studio는 일반적으로 ASP.NET MVC 사이트의 디버깅 속도가 느리거나 일반로드 ( "디버그없이 시작")가 느립니다. 항상 그런 것은 아닙니다. 처음에는 프로젝트가 훌륭하고 빠르게로드되지만 일단 느리게로드되면 그 후에 항상 느리게로드됩니다. 1-2 분 이상 기다릴 수 있습니다.
내 설정 :
내가 사용하고 비주얼 스튜디오 2012 익스프레스를 현재,하지만 난 비주얼 스튜디오 2010 익스프레스에서 같은 문제를 겪고도했습니다. 내 솔루션은 네트워크 드라이브에 저장되어 있습니다. 특히 중요한 경우 내 문서가 네트워크 드라이브로 리디렉션됩니다. 이 설정에서 내 사이트가 매우 빠르게로드되는 경우가 있습니다.
Internet Explorer 9에서는 일반적으로로드되지만 Firefox에서도 동일한 문제가 발생합니다.
이것은 내가 작업중 인 모든 ASP.NET MVC 프로젝트에서 발생할 수 있으며 모든 ASP.NET MVC 프로젝트가하는 DisplayTemplates를 중심으로 진행됩니다. 그리고 그것이 중요하다면 모두 C #과 Razor입니다.
조짐:
시스템은 심볼을 수백 번 로드 합니다. 기본적으로 다음과 같지만 동일한 CSHTML에 대해 약간 다른 DLL 파일이있는 행이 300 개 이상 있습니다.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.xighmhow.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.cv5hktkf.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.1o77hs8i.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.jja-77mw.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.l_e9ev_s.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.b4n59gom.dll', Symbols loaded.
위의 "Contact", "Location"및 "StatusCode"라는 세 개의 DisplayTemplate이 있습니다. 디스플레이 템플릿이 호출 될 때마다 IIS가 심볼을 두 번로드하는 것 같습니다. 따라서이 세 가지 디스플레이 템플릿을 모두 호출하는 100 개의 항목 표를 표시하면 600 개의 별도 기호가로드됩니다.
이것은 빠른 작업이 아닙니다. IIS가 생성하는 로그 파일을 살펴보면 각 심볼을로드하는 데 약 200ms가 걸립니다. 따라서, 매우 긴 지연.
내가 시도한 것 :
- 디버그 또는 릴리스 버전은 중요하지 않습니다.
- 웹 서버에서 전체 IIS 구현에 프로젝트를 배치하면 문제없이 매우 빠르게 실행됩니다.
- Cassini, IIS Express 7.5 및 IIS Express 8.0 모두 문제가 있습니다.
- 모든 중단 점 삭제는 아무 것도 수행하지 않습니다.
- Clean Solution 또는 .suo를 삭제해도 아무 것도 수행되지 않습니다.
- IIS Express를 복구하거나
My Docs\IISExpress
폴더를 삭제 하거나 Visual Studio를 복구 / 재설치하면 문제가 사라질 수 있지만 잠시 후에 다시 돌아올 수 있습니다.
모든 조언을 부탁드립니다.
더 많은 질문에 대답하기 위해, 내 기계에는 확실히 마력이 있습니다. 화를내는 것은 NOTHING이 변경된 동일한 프로젝트가 때로는 IIS Express를 복구하고 My Docs\IISExpress
폴더를 삭제 한 후 때로는 매우 빠르게로드 될 수 있다는 것입니다 . 결국 "무언가"가 발생하고 다시로드하는 데 2 분이 걸립니다. 내가하고있는 일은 복잡한 프로젝트가 아닙니다. 외부 라이브러리 또는 종속성이 없으며 VS.NET에는 애드온이 없습니다.
이 시스템에는 Symantec Endpoint Protection이 있으며 이로 인해 혼란을 겪은 기록이 있습니다. 그러나 완전히 비활성화하면 (관리자가되는 것이 좋습니다) 문제가 해결되지 않았습니다.
이 시점에서 이론이 있습니다. 네트워크 공유에서 리디렉션 폴더를 작업하기 때문에 이것이 전부라고 생각합니다. 디버거가 수백 개의 "로드 된 심볼"라인을 통과하는 동안 나는 그것이 무엇을하고 있는지보기 위해 잠시 멈췄다. 내 코드에 있었고 내가 가지고있는 DisplayTemplate을로드했습니다. 템플릿 출력으로 스테핑하면 다음과 같습니다.
Step into: Stepping over non-user code 'System.Threading.WaitHandle.InternalWaitOne'
Step into: Stepping over non-user code 'System.Threading.WaitHandle.WaitOne'
Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated'
Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCapture'
Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch'
Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch'
Step into: Stepping over non-user code 'System.Web.Compilation.AssemblyBuilder.Compile'
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.bciuyg14.dll', Symbols loaded.
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.CompileWebFile'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultInternal'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists'
Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName'
Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView'
Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.Find'
Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.FindPartialView'
Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.ActionCacheViewItem.Execute'
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.kwj3uqan.dll', Symbols loaded.
Step into: Stepping over non-user code 'System.RuntimeType.CreateInstanceSlow'
Step into: Stepping over non-user code 'System.Web.Mvc.DependencyResolver.DefaultDependencyResolver.GetService'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerViewEngine.DefaultViewPageActivator.Create'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerCompiledView.Render'
Visual Studio가 호출 될 때마다 내 디스플레이 템플릿을 다시 컴파일하는 것처럼 보입니다 . 다시 수백 번입니다. 내 이론은 Visual Studio에서 파일을 컴파일하여 네트워크 공유에 저장 한 다음 네트워크 공유에 새로운 시간을 표시 한 다음 파일이 변경된 것으로 생각하여 Visual Studio에서 다시 컴파일한다는 것입니다. 그러나 이론 만; 나는 실마리가 없다.
예를 들어 오프라인 파일이 켜져 있습니다 (사무실의 데스크톱 컴퓨터이므로 덜 신경 쓰지 못했습니다). 내일 비활성화하고 재부팅 한 후 다시 시도하겠습니다.
또한 내 프로젝트를 그대로 로컬 C로 옮기면 문제가 해결됩니다. 매우 빠르게로드됩니다. 그러나 이것은 작업 환경에 이상적이지 않습니다. 이전 버전이 손실되고 코드를 수동으로 복사하지 않으면 코드가 전혀 백업되지 않으며 더 이상 다른 사람과 공유되지 않습니다.
C에서 네트워크 공유로왔다 갔다하면 복사 할 수 있습니다. 매 페이지가로드 될 때마다 2 분을 기다리는 것이 훨씬 성가신 일입니다.