Я в конце концов. Visual Studio, как правило, очень медленна для отладки или просто загрузки ( "начать без отладки" ) моих сайтов ASP.NET MVC. Не всегда: сначала проекты будут загружаться красиво и быстро, но как только они загружаются медленно, они будут всегда загружаться медленными после этого. Я мог ждать 1-2 минуты или больше.
Моя настройка:
В настоящее время я использую Visual Studio 2012 Express, но у меня была такая же проблема и в Visual Studio 2010 Express. Мое решение хранится на сетевом диске; в частности, "Мои документы" перенаправляются на сетевой диск, если это имеет значение. (Это не должно быть. Бывают случаи, когда мой сайт очень быстро загружается в этой настройке.)
Обычно загружаюсь в Internet Explorer 9, но такая же проблема возникает в Firefox.
Это может произойти в любом проекте ASP.NET MVC, над которым я работаю, и, похоже, он вращается вокруг DisplayTemplates, который выполняет все мои проекты ASP.NET MVC. И все это С# и Razor, если бы это имело значение.
Симптомы:
Система будет загружать мои символы сотни раз. В основном, следующее, но есть не менее 300 таких строк, каждый из которых имеет несколько разных DLL файлов для тех же CSHTML:
'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.
В приведенном выше примере у меня есть три DisplayTemplates: "Contact", "Location" и "StatusCode". Похоже, что IIS загружает символы дважды за каждый раз, когда вызывается displaytemplate. Таким образом, если я показываю таблицу из 100 записей, которая вызывает все три из этих displaytemplates, то загружается 600 отдельных символов.
Это тоже не быстрая операция. Глядя в файлы журнала, которые генерирует IIS, для загрузки каждого символа требуется около 200 мкс. Таким образом, сверхдлинные задержки.
Что я пробовал:
- Отладка или версия выпуска, это не имеет значения.
- Перенос моего проекта на полную реализацию IIS на веб-сервере выполняется очень быстро без проблем.
- У Cassini, IIS Express 7.5 и IIS Express 8.0 все проблемы.
- Удалить все точки останова ничего не делает.
- Очистить решение или удалить .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 перекомпилирует мой displaytemplate каждый раз, который был вызван, что снова, сотни раз. Моя теория заключается в том, что Visual Studio компилирует файл, сохраняет его на сетевой ресурс, сетевой ресурс, а затем как-то печатает новое время на нем, а Visual Studio думает, что файл был изменен, и, таким образом, Visual Studio снова перекомпилирует его. Однако только теория; Я действительно понятия не имею.
Для одного, видимо, у меня автономные файлы (это настольный компьютер в офисе, мне все равно). Я собираюсь отключить, перезагрузить и повторить попытку завтра.
Плюс, перенос моего проекта, как есть, на локальный C: исправляет его. Он загружается очень быстро. Но это не идеально в рабочей среде. Я теряю предыдущие версии, мой код не копируется вообще, если я не скопирую его вручную, и он больше не делится ни с кем.
Я могу справиться с копированием его из C в общий сетевой ресурс, если это произойдет. Гораздо более раздражает ждать две минуты для загрузки каждой страницы.