Отладка / загрузка Visual Studio очень медленная

Я в конце концов. 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. И это все C# и 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: "Контакт", "Расположение" и "StatusCode". Похоже, что IIS загружает символы дважды каждый раз, когда вызывается шаблон дисплея. Таким образом, если я отображаю таблицу из 100 записей, которая вызывает все три из этих шаблонов отображения, то загружается 600 отдельных символов.

Это тоже не быстрая операция. Просматривая файлы журнала, которые генерирует IIS, для загрузки каждого символа требуется около 200 мс. Таким образом, супер-длинные задержки.

Что я пробовал:

  • Отладка или выпуск версии, это не имеет значения.
  • Помещение моего проекта на полную реализацию IIS на веб-сервере запускает его очень быстро, без проблем.
  • Cassini, IIS Express 7.5 и IIS Express 8.0 имеют проблемы.
  • Удалить все точки останова ничего не делает.
  • Чистый раствор или удаление.suo тоже ничего не делают.
  • Если я чиню IIS Express или удаляю My Docs\IISExpress папку, или восстановите / переустановите Visual Studio → проблема МОЖЕТ исчезнуть, но только на некоторое время, прежде чем она вернется.

Любой совет вообще приветствуется.

Чтобы ответить на дополнительные вопросы, да, моя машина определенно имеет мощность. Раздражает то, что один и тот же проект, НИЧЕГО не измененный, может иногда загружаться очень и очень быстро, обычно после того, как я исправляю 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 думает, что файл изменился, и, таким образом, Visual Studio перекомпилирует его еще раз. Только теория, хотя; Я действительно понятия не имею.

Например, у меня есть автономные файлы (это настольный компьютер в офисе; мне было все равно). Я собираюсь отключить, перезагрузиться и повторить попытку завтра.

Плюс, перемещение моего проекта, как есть, в локальный C: исправляет это. Он загружается очень быстро. Но это не идеально в рабочей среде. Я теряю предыдущие версии, мой код вообще не копируется, если я не копирую его вручную, и он больше никому не передается.

Я могу обойтись копированием туда и обратно из C на общий сетевой ресурс, если это произойдет. Гораздо неприятнее ждать две минуты для каждой загрузки страницы.

55 ответов

Решение

Вот как я решил проблему "медленной загрузки символов" в Visual Studio 2012:

  • Зайдите в Инструменты -> Параметры -> Отладка -> Общие

  • Проверьте флажок рядом с "Включить только мой код".

  • Перейдите в Инструменты -> Параметры -> Отладка -> Символы

  • Нажмите кнопку "..." и создайте / выберите новую папку на локальном компьютере для хранения кэшированных символов. Я назвал мой "Кэширование символов" и поместил его в Documents -> Visual Studio 2012.

  • Нажмите "Загрузить все символы" и дождитесь загрузки символов с серверов Microsoft, что может занять некоторое время. Обратите внимание, что кнопка "Загрузить все символы" доступна только во время отладки.

  • Снимите флажок рядом с "Серверы Microsoft Symbol", чтобы запретить Visual Studio удаленно запрашивать серверы Microsoft.

  • Нажмите "ОК".

Отныне загрузка символов должна быть намного быстрее.

Обратите внимание, что при внесении каких-либо изменений / загрузок в сборки Microsoft вам может потребоваться вернуться в диалоговое окно "Символы" и снова "Загрузить все символы".

Отключение intelliTrace исправило это для меня.

В Visual Studio Инструменты -> Параметры -> IntelliTrace

Затем снимите флажок "Включить IntelliTrace".

Отключить IntelliTrace в Visual Studio 2012

У меня ничего не получалось, но я нашел точку останова на удаленном символе. Кажется, 2010 висел на нем. Чтобы увидеть, если это ваша проблема, выполните debug->windows-> точки останова, если они есть, просто удалите их.

Сондерс упомянул, что проверил это, но это не было упомянуто в решениях этой проблемы. Возможно, это общеизвестно для некоторых, но не для всех нас.

Я удалил папку "Temporary ASP.NET Files", и загрузка моей локальной страницы значительно улучшилась. Вот путь... %temp%\ Временные файлы ASP.NET \

Я столкнулся с той же проблемой и перепробовал большинство из приведенных выше решений Простое удаление кеша и временных файлов в итоге работает на меня.

Попробуйте удалить содержимое этих двух папок:

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

а также

C:\Users\\{UserName}\AppData\Local\Temp (в частности, папки iisexpress и Temporary ASP.NET Files).

Это можно настроить так, чтобы это происходило автоматически при входе в Windows путем добавления файла cmd в C:\Users\\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup папка со следующим содержимым:

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

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

Вы включили FusionLog?

Мой VisualStudio очень медленно запускался, открывал решение и загружал символы при запуске отладки. Это было медленно только на моей машине, но не на других машинах.

FusionLog записывает тонны журналов на диск. Просто отключив его на RegEdit, я решил все.

Это ключ FusionLog в реестре:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

Проверьте значение ForceLog (1 включено, 0 отключено).

Я думаю, что наконец-то смогу узнать причину, но не причину. Когда проблема начала возникать снова, я заметил, что тонна процессов "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 - Два года спустя, и это все еще проблема для меня в Visual Studio Community 2013, но я, кажется, по крайней мере нашел преступную задачу: Explorer.exe. Да, кто знал. В тот момент, когда я заканчиваю эту задачу, бац, страница загружается за одну секунду.

Если у меня открыт файловый браузер Windows Explorer для моего перенаправленного сетевого диска (что часто происходит именно там, где находится мой код), эта проблема, похоже, возникает. Закрытие окна не достаточно, я должен убить всю задачу Explorer.exe. Я мог только догадываться, что он делает... сходя с ума с файловыми ручками?

Обычно я могу использовать диспетчер задач, чтобы запустить новое задание explorer.exe (я могу только взять столько альтбэков), и Visual Studio продолжит загружаться красиво и быстро. Но если я снова открою Windows Explorer, он почти всегда возвращается к супер-медленному.

Итак, если у вас есть перенаправленный сетевой ресурс, попробуйте. Это наверняка лучше, чем работать на месте.

Выше приведены все хорошие решения, и я попробовал все из них, но получил решение здесь, которое заключается в

Debug -> Delete All Breakpoints

Для меня я реализовал этот совет, который существенно улучшил производительность, добавив следующие два атрибута в тег компиляции в web.config

<compilation ... batch="false" optimizeCompilations="true"> ... </compilation>

Что делает batch="false"?

Это делает предварительную компиляцию более избирательной, компилируя только те страницы, которые были изменены и требуют повторной компиляции

Что именно делает optimizeCompilations? Источник

ASP.NET использует хеш-код для каждого приложения, который включает в себя состояние нескольких вещей, включая папку bin и App_Code и global.asax. Всякий раз, когда запускается домен приложения ASP.NET, он проверяет, изменился ли этот хеш-код по сравнению с тем, что он ранее вычислял. Если это так, то вся папка codegen (где находятся скомпилированные и теневые копии) уничтожается.

Когда эта оптимизация включена (через optimizeCompilations="true"), хеш больше не учитывает bin, App_Code и global.asax. В результате, если они меняются, мы не стираем папку с codegen.

Ссылка: элемент компиляции на msdn

Для меня это был IE 9.08.8112.16241. Как только я использовал Firefox или Chrome, не было никакой медленной отладки с F10 или F11. Я не знаю, в чем проблема с IE, но сейчас я официально презираю его использование для тестирования.

Обновление: я отключил все надстройки программы IE, и он вернулся на полную скорость. Включение их по одному показало, что виновником был LastPass (в моем случае). Я думаю, что я не могу обвинить MS в конце концов.

У меня также были проблемы с производительностью при отладке, и я попробовал очень много вариантов отладчика. В моем случае огромная производительность достигается при изменении этих параметров:

Инструменты - Параметры - Отладка - Окно вывода - (Общие настройки вывода - Все выходные данные отладки) - ВЫКЛ

В моем случае это было расширение Visual Studio.NET Reflector (версия 8.3.0.93) с VS 2012. Отладка занимала 10 секунд для каждого перехода на более высокий уровень (F10).

В Visual Studio перейдите в раздел Инструменты / Расширения и обновления... и отключите расширение Visual Studio Reflector. Не забудьте перезапустить Visual Studio.

У меня были проблемы с медленной отладкой Visual Studio, когда был включен отладчик "Native Code". Попробуйте отключить это.

На "Visual Studio 2012" перейдите по ссылке:

  1. Свойства проекта ->
  2. Интернет ->
  3. Отладчики (внизу страницы). ->
  4. Отключить все кроме ASP.NET

Надеюсь, поможет.

Похожие вопросы: 1, 2

В моем случае это было

Tools/Options/Debugging/General/Enable JavaScript debugging for ASP.NET (Chrome and IE)

Как только я снял этот флажок, мой отладочный запуск изменился с 45-60 секунд до 0-5 секунд.

Однажды, после отключения электричества, мне приходилось сталкиваться с одной и той же проблемой медленности каждый раз, когда была достигнута точка останова или было сгенерировано исключение.

Я смутно помнил, что файл "suo" (в той же директории, что и файл решения "sln") может быть поврежден и все замедляется.

введите описание изображения здесь

Я удалил свои файлы "suo" и все было в порядке. Удаление файлов.suo безвредно и подразумевает только воссоздание моего макета Windows, а также запуска проекта и нескольких других некритических настроек.

Я также столкнулся с этой проблемой, ниже приведены шаги, которые я выполняю, и это работает для меня всегда:

  • Удаление файла.suo решения.
  • Удаление временных файлов ASP.NET (его можно найти по адресу % WINDOW% \ Microsoft.NET \ Framework \\ Temporary ASP.NET Files)
  • Удаление всех точек останова в приложении.

Моя медленная VS проблема была решена путем отключения ссылки на браузер

Я не знаю, сохраняется ли у вас эта проблема, но я отлаживаю сайты в Visual Studio, подключив отладчик к самому процессу, а не позволяя VS сделать это для меня, и я обнаружил, что это значительно улучшило время. Я использую расширение для VS под названием AttachTo, и у меня есть небольшая статья о том, как я использую его здесь.

Надеюсь, это поможет.

Если кто-то замечает, что такое поведение выходит из левого поля, убедитесь, что в web.config не установлены точки останова. Я, должно быть, установил один случайным щелчком мыши, и это действительно замедлило все операции отладки.

Потратив весь день на ожидание загрузки символов, столь же медленных, как скорость черепахи, смешивание и переключение между всеми возможными комбинациями: " Просто мой код", символы кэширования, Intellitrace, Just-In-Time, процессы уничтожения и т. Д.

Мое решение было на самом деле отключить антивирус. Да, Защитник Windows замедлял запуск моего проекта! Он будет проверять все dll, как Visual Studio запрашивает их, и замедляет весь процесс загрузки символов.

Я должен сказать, что у наших машин есть отличные характеристики для быстрой компиляции решения, так что это никогда не было проблемой. Мы кодируем в VS 2013 Ultimate.

Перейдите к IIS Express, очистите кеш и сайты

cd "C:\Program Files (x86)\IIS Express\"

запустить это appcmd.exe list site /xml | appcmd delete site /in

Кроме того, очистите ваши временные файлы в %temp% и выйти или перезагрузить

Это удалит все сайты, наслаждайтесь!

Очистка кеша символов работала для меня.

Смотрите: строка меню / Инструменты / Параметры / Отладка / Символы / Пустой кэш символов

В Visual Studio:

Сервис -> Параметры -> Отладка -> Символы

Выберите "Только указанные модули". Нажмите на ссылку "указать модули" и добавьте пустой модуль (нажмите кнопку "Новый документ" и нажмите "ОК").

Отладка ядра Asp.net была мучительно медленной, потому что неизвестное расширение VS заменило стандартный отладчик Just in Time.

Я нашел такое сообщение на вкладке конфигурации OPTIONS\DEBUGGING\Just-In-Time (как текст предупреждения). Другой отладчик зарегистрировался как отладчик Just-In-Time. Для восстановления включите отладку Just-In-Time или запустите восстановление Visual Studio.

Описание: https://msdn.microsoft.com/en-us/library/ssc8234s.aspx?f=255&MSPPError=-2147217396

Возврат к отладчику JIT по умолчанию (только что отмеченный вариант Managed, который не был отмечен) решит все мои проблемы.

Подобная проблема пропала впустую лучшую половину моего дня!

Поскольку решение моей проблемы отличалось от того, что было сказано здесь, я опубликую его, чтобы оно могло помочь кому-то еще.

Моя была точка останова. У меня была точка останова "Break at function" (т. Е. Вместо нажатия клавиши F9 на строке кода, мы создаем их с помощью окна точек останова), которая должна останавливаться в функции библиотеки вне моего проекта.

И у меня было "Использовать Intellisense для проверки имени функции" ПРОВЕРЕНО. (Информация здесь.)

Это замедлилось по сравнению с адом (запуск проекта с 2 секунд до 5 минут).

Удаление точки останова решило это навсегда.

Для меня это были условные контрольные точки. Те, кажется, действительно замедляют ход событий.

Убедитесь, что вы не открывали Visual Studio в режиме администратора

Я столкнулся с этой проблемой и должен был работать в обычном режиме.

Перейдите к переменным среды и найдите ключ _NT_SYMBOL_PATH.

Удали это.

Вуаля, работал как шарм.

Откройте папку решения в проводнике Windows, закройте Visual Studio, удалите файл.suo из проводника Windows.

Теперь откройте проект в visual studio, надеюсь, отладчик будет быстро подключен / отключен.

После всего вышесказанного у меня сработало одно:
В окне "Потоки" ("Отладка->Windows-> Потоки") установите для параметра "Группировать" значение "Нет". Это можно сделать только во время отладки.

Это оказало влияние даже после закрытия этого окна.

Другие вопросы по тегам