Отладка/загрузка 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-файлами для тех же CSHTMLs:

'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_Web_contact.cshtml.22013bb9.xighmhow.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_Web_contact.cshtml.22013bb9.cv5hktkf.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_Web_statuscode.cshtml.22013bb9.1o77hs8i.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_Web_statuscode.cshtml.22013bb9.jja-77mw.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_Web_location.cshtml.22013bb9.l_e9ev_s.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_Web_location.cshtml.22013bb9.b4n59gom.dll', Symbols loaded.

в приведенном выше, у меня есть три DisplayTemplates: "контакт", "местоположение" и "StatusCode". Похоже, что IIS загружает символы дважды для каждого вызова displaytemplate. Таким образом, если я показываю таблицу из 100 записей, которая вызывает все три из этих displaytemplates, загружается 600 отдельных символов.

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

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

  • Debug или release версию, это не имеет значения.
  • размещение моего проекта в полной реализации IIS в интернете сервер работает очень быстро без проблем.
  • Cassini, IIS Express 7.5 и IIS Express 8.0 все имеют проблему.
  • удалить все точки останова ничего не делает.
  • Очистить Решение или удаления .СУО тоже ничего не делает.
  • если я восстанавливаю IIS Express или удаляю My DocsIISExpress папка или восстановление/переустановка Visual Studio → проблема может уйти, но только на некоторое время, прежде чем она придет в норму спина.

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

для того чтобы ответить больше вопросов, да моя машина определенно имеет лошадиную силу. Бесит то, что тот же проект, без каких-либо изменений, может загружаться очень быстро иногда, как правило, после ремонта IIS Express и удаления . В конце концов" что-то " происходит, и это до 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:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_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:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f823675085dApp_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 к сетевому ресурсу, если дело доходит до него. Гораздо более раздражает ждать две минуты для каждой загрузки страницы.

30 ответов


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

  • перейти к инструментам - > параметры - > отладка - > общие

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

  • перейти к инструментам - > параметры - > отладка - > символы

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

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

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

  • клик "ЛАДНО."

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

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


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

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

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

Disable IntelliTrace in Visual Studio 2012


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

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


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


Я думаю, что наконец-то, по крайней мере, знаю причину, хотя и не причину. Когда проблема начала возникать снова, я заметил тонну " conhost.exe-файла" процессы-сирот. Я бы закрыл Visual Studio, и они остались бы открытыми. Окончание задания на каждом из них окончательно, надежно решило проблему. [с надеждой]

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

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


Edit #1-к сожалению, это не "серебряная пуля". У меня это не всегда получается. Как правило, когда все идет медленно, я просто закрываю все свои сеансы Visual Studio, а затем приступаю к задаче менеджер и конец любого экземпляра, conhost.exe, iisexpress.exe Microsoft.VisualStudio.Сеть.Хозяин.exe и MSBuild.exe я могу найти.

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

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


Edit #2-два года спустя, и это еще проблема для меня в Visual Studio Сообщество 2013, но я, похоже, по крайней мере, нашел виновника задачи: Explorer.exe. Да, кто бы мог подумать. В тот момент, когда я заканчиваю эту задачу, БАМ, страница загружается за одну секунду.

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

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

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


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

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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

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


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

Debug -> Delete All Breakpoints

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

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

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

и

C:\Users\{UserName}\AppData\Local\Temp (в частности, iisexpress и временный ASP.NET Files folders).

это может быть настроено автоматически при входе в 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

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

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


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

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

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

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

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

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

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

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


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

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


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

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


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

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

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

надеюсь, что это помогает.

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


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

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

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


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

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


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

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

enter image description here

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


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

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

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

enter image description here


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


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

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


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

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

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


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

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

мой был точкой останова. У меня был "разрыв функции" точка останова (i.e вместо нажатия F9 в строке кода мы создаем их с помощью окна точек останова), которое должно останавливаться в библиотечной функции вне моего проекта.

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

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

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


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

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


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

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

обратите внимание, что отключение отладки- > параметры - >отладка - > общие "включить поддержку источника" или "требовать, чтобы исходные файлы точно соответствовали исходной версии"не сделать любой разница.


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


В Visual Studio:

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

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


откройте папку решения в проводнике windows, закройте visual studio, удалите .suo файл из Проводника windows.

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


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

удалить.

вуаля, сработало как заклинание.


проблемой для меня была функция "ссылка браузера", которая очень тяжелая, когда у вас открыто несколько вкладок для одного проекта !

потому что каждый раз, когда мы запускаем проект, он открывает новую вкладку с браузером link communications.

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

Это бесплатно мгновенно visual studio ! Это волшебство ! ;-)

"ссылка браузер функция с Visual Studio 2013, которая создает канал связи между средой разработки и одним или несколькими веб-браузерами. Вы можете использовать Browser Link для обновления веб-приложения сразу в нескольких браузерах, что полезно для кросс-браузерного тестирования."


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

инструменты-->импорт и экспорт настроек-- > да, сохраните мои текущие настройки-->Visual C#

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