Visual Studio 디버깅 /로드가 매우 느림 느리거나 일반로드

나는 끝났어. 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 분을 기다리는 것이 훨씬 성가신 일입니다.



답변

Visual Studio 2012에서 “느린 심볼로드”문제를 해결하는 방법은 다음과 같습니다.

  • 도구-> 옵션-> 디버깅-> 일반으로 이동하십시오.

  • “내 코드 만 활성화”옆에있는 확인 표시를 확인하십시오.

  • 도구-> 옵션-> 디버깅-> 기호로 이동하십시오.

  • “…”버튼을 클릭하고 캐시 된 심볼을 저장하기 위해 로컬 컴퓨터 어딘가에 새 폴더를 생성 / 선택하십시오. 필자는 “Symbol caching”이라는 이름을 지정하여 Documents-> Visual Studio 2012에 넣었습니다.

  • “모든 심볼로드”를 클릭하고 Microsoft 서버에서 심볼이 다운로드 될 때까지 기다리십시오. 시간이 걸릴 수 있습니다. 모든 심볼로드 버튼은 디버깅하는 동안에 만 사용할 수 있습니다.

  • Visual Studio가 Microsoft 서버를 원격으로 쿼리하지 못하게하려면 “Microsoft Symbol 서버”옆에있는 확인 표시를 선택 취소하십시오.

  • “확인”을 클릭하십시오.

이제부터 심볼 로딩이 훨씬 빨라질 것입니다.

Microsoft 어셈블리를 변경 / 다운로드 할 경우 기호 대화 상자로 돌아가서 “모든 기호로드”를 다시 수행해야 할 수도 있습니다.


답변

intelliTrace를 끄면이 문제가 해결되었습니다.

Visual Studio에서 도구-> 옵션-> IntelliTrace

그런 다음 “Enable IntelliTrace 활성화”확인란의 선택을 취소하십시오.

Visual Studio 2012에서 IntelliTrace 비활성화


답변

이 중 어느 것도 효과가 없었지만 삭제 된 기호에서 중단 점을 발견했습니다. 2010 년이 걸려있는 것 같습니다. 이것이 문제인지 확인하려면 디버그-> 창-> 중단 점을 수행하십시오.있는 경우 삭제하십시오.

손더스는이를 확인했지만이 문제에 대한 솔루션에는 언급되지 않았다고 언급했다. 어쩌면 우리 모두에게 공통적 인 지식이있을 수도 있습니다.


답변

“Temporary ASP.NET Files”폴더를 삭제하고 로컬 호스트 페이지로드가 크게 향상되었습니다. 경로는 다음과 같습니다 … % temp % \ Temporary ASP.NET Files \


답변

FusionLog를 활성화 했습니까?

내 VisualStudio는 디버깅을 시작할 때 시작, 솔루션 열기 및 심볼로드가 매우 느 렸습니다. 내 컴퓨터에서만 느 렸지만 다른 컴퓨터에서는 느 렸습니다.

FusionLog는 수많은 로그 항목을 디스크에 씁니다. RegEdit에서 비활성화하면 내 경우에 모든 것이 해결되었습니다.

이것은 레지스트리의 FusionLog 키입니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

ForceLog 값을 확인하십시오 (1 활성화, 0 비활성화).


답변

나는 같은 문제를 겪고 위의 해결책 중 대부분을 시도했습니다. 단순히 캐시와 임시 파일을 삭제하면 효과가 있습니다.

이 두 폴더의 내용을 제거하십시오.

C:\Users\\{UserName}\AppData\Local\Microsoft\WebsiteCache

C:\Users\\{UserName}\AppData\Local\Temp (특히 iisexpress 및 Temporary ASP.NET Files 폴더).

C:\Users\\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup다음 내용 의 폴더에 cmd 파일을 추가하여 Windows에 로그온 할 때 자동으로 발생하도록 설정할 수 있습니다 .

rmdir C:\Users\\{username}\AppData\Local\Microsoft\WebsiteCache /s /q

rmdir C:\Users\\{username}\AppData\Local\Temp /s /q


답변

나는 그 이유는 아니지만 적어도 원인을 알 수 있다고 생각합니다. 문제가 다시 발생하기 시작했을 때, 수많은 “conhost.exe”프로세스가 분리 된 것을 발견했습니다. Visual Studio를 닫으면 계속 열려 있습니다. 각각의 작업을 끝내고 마침내 문제를 확실하게 해결했습니다. [희망적으로]

conhost.exe는 Visual Studio에서 사용하지만 Visual Studio 프로세스는 아닙니다. 따라서 다른 사용자가 conhost.exe를 실행하는 다른 응용 프로그램이있을 수 있습니다. YMMV를 제외한 모든 작업을 안전하게 종료하십시오.)

왜 이런 일이 발생합니까? 한 번에 둘 이상의 프로젝트를 열 때 발생하는 것처럼 보이며 언제든지 프로젝트 중 하나만 빌드하고 디버그하더라도 자주하는 경향이 있습니다.


편집 # 1-불행히도 “은 탄환”이 아닙니다. 항상 나를 위해 작동하지는 않습니다. 일반적으로 상황이 느려지면 모든 Visual Studio 세션을 닫은 다음 작업 관리자로 이동하여 conhost.exe, iisexpress.exe Microsoft.VisualStudio.Web.Host.exe 및 MSBuild.exe 인스턴스를 종료합니다. 내가 찾을 수 있습니다.

일반적으로 그 후 프로젝트를 다시 시작하면 신속하게로드됩니다. 그러나 항상 그런 것은 아닙니다.

실제로 최선의 조치는 리디렉션 된 폴더 / 네트워크 공유에서 코드를 빌드하고 디버그하지 않는 것입니다.


편집 # 2-2 년 후에도 Visual Studio Community 2013에서 여전히 문제가되지만 최소한 범인 작업 인 Explorer.exe를 찾은 것 같습니다 . 그래, 누가 알았어. 그 작업을 끝내는 순간 bam, 페이지가 1 초 안에로드됩니다.

리디렉션 된 네트워크 드라이브에 열려있는 Windows 탐색기 파일 브라우저가있는 경우 (종종 코드가있는 위치)이 문제가 발생하는 것 같습니다. 창을 닫는 것만으로는 충분하지 않으므로 전체 Explorer.exe 작업을 종료해야합니다. 나는 그것이 무엇을하고 있는지 추측 할 수 있었다 … 파일 핸들이있는 견과류?

나는 일반적으로 작업 관리자를 사용하여 새로운 explorer.exe 작업을 시작할 수 있습니다 (많은 alt-tabbing 만 걸릴 수 있음) .Visual Studio는 계속 멋지고 빠르게로드됩니다. 그러나 Windows 탐색기를 다시 열면 거의 항상 슈퍼 슬로우 모션으로 돌아갑니다.

따라서 리디렉션 된 네트워크 공유가있는 경우 공유하십시오. 현지에서 일하는 것이 확실합니다.