Отладка/загрузка 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. И все это С# и 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 в общий сетевой ресурс, если это произойдет. Гораздо более раздражает ждать две минуты для загрузки каждой страницы.

Ответ 1

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

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

  • ПРОВЕРЬТЕ галочку рядом с надписью "Включить только мой код".

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

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

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

  • УКАЗАТЬ галочку рядом с "Серверы Microsoft Symbol Servers", чтобы предотвратить удаленную проверку Visual Studio серверами Microsoft.

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

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

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

Ответ 2

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

В Visual Studio инструменты → Параметры → IntelliTrace

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

Disable IntelliTrace in Visual Studio 2012

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

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

Ответ 6

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

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

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

Ответ 7

Я думаю, что, возможно, я, наконец, по крайней мере знаю причину, хотя не причина. Когда проблема возникла снова, я заметил, что тонны процессов "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. Да, кто знал. В тот момент, когда я заканчиваю эту задачу, bam, страница загружается за одну секунду.

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

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

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

Ответ 8

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

Debug -> Delete All Breakpoints

Ответ 9

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

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

Ответ 10

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

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

Что делает пакет = "false"?

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

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

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

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

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

Ответ 11

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

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

Ответ 12

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

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

Ответ 13

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

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

  • Свойства проекта →
  • Веб →
  • Отладчики (внизу страницы). →
  • Отключить все, кроме ASP.NET

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

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

Ответ 14

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

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

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

Ответ 15

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

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

Ответ 16

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

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

enter image description here

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

Ответ 17

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

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

Ответ 18

Моя медленная проблема VS была устранена, отключив Browser Link

enter image description here

Ответ 19

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

Ответ 20

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

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

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

Ответ 21

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

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

Ответ 22

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

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

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

И у меня было "Использовать Intellisense для проверки имени функции" CHECKED. (Info здесь.)

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

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

Ответ 23

Одна вещь, которая работала для меня после выполнения всего вышеизложенного:
В окне Threads (Debug- > Windows- > Threads) установите Group by на None. Это можно сделать только при отладке.

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

Ответ 24

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

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

Ответ 25

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

Удалите его.

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

Ответ 26

Быстрое и простое решение для тех, кто не имеет большого отклонения от настроек по умолчанию VS.

Инструменты → Параметры импорта и экспорта → Да, сохраните мои текущие настройки → Visual С#

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

Ответ 27

В моем случае я заметил, что отключение моего подключения к Интернету заставит его работать так же быстро, как с ctrl-f5, поэтому я пошел на debug- > options- > символы и просто не отмечил все местоположения .pdb.

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

Обратите внимание, что отключение Debug- > Options- > Debugging- > General "Включить поддержку источника" или "Требовать, чтобы исходные файлы соответствовали исходной версии" не было бы. >

Ответ 28

Есть также осложнения в частичных представлениях, где на странице есть ошибка, которая не распознается немедленно. Как Model.SomeValue вместо Model.ThisValue. Это может не подчеркнуть и вызвать проблемы при отладке. Это может быть настоящей болью, чтобы поймать.

Ответ 29

В Visual Studio:

Инструменты → Параметры → Отладка → Символы

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

Ответ 30

Откройте папку решения в проводнике Windows, закройте визуальную студию, удалите файл .suo из обозревателя Windows.

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