Jestem skończony. Program Visual Studio jest zwykle bardzo powolny do debugowania lub zwykłego ładowania („rozpocznij bez debugowania”) moich witryn ASP.NET MVC. Nie zawsze: na początku projekty ładują się ładnie i szybko, ale gdy ładują się powoli, potem zawsze ładują się wolno. Mogę czekać 1-2 minuty lub dłużej.
Moja konfiguracja:
Obecnie używam Visual Studio 2012 Express , ale miałem ten sam problem w Visual Studio 2010 Express. Moje rozwiązanie jest przechowywane na dysku sieciowym; w szczególności Moje Dokumenty są przekierowywane na dysk sieciowy, jeśli ma to znaczenie. (Nie powinno. Są chwile, w których moja strona ładuje się bardzo szybko przy tej konfiguracji).
Zwykle ładuję się w przeglądarce Internet Explorer 9, ale ten sam problem występuje w przeglądarce Firefox.
Może się to zdarzyć w każdym projekcie ASP.NET MVC, nad którym pracuję, i wydaje się, że obraca się wokół posiadania DisplayTemplates, co robią wszystkie moje projekty ASP.NET MVC. I to wszystko C # i Razor, jeśli to miało znaczenie.
Objawy:
System załaduje moje symbole setki razy. Zasadniczo następujące, ale istnieje co najmniej 300 takich wierszy, każdy z bardzo nieznacznie różnymi plikami DLL dla tych samych 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.
Powyżej mam trzy DisplayTemplates: „Kontakt”, „Lokalizacja” i „StatusCode”. Wygląda na to, że IIS ładuje symbole dwa razy za każdym razem, gdy wywoływany jest panel informacji. Tak więc, jeśli wyświetlam tabelę zawierającą 100 wpisów, która wywołuje wszystkie trzy powyższe przykłady, to jest ładowanych 600 osobnych symboli.
To też nie jest szybka operacja. Przeglądając pliki dziennika generowane przez IIS, ładowanie każdego symbolu zajmuje około 200 ms. Zatem bardzo długie opóźnienia.
Co próbowałem:
- Wersja debugowania lub wydania nie ma znaczenia.
- Umieszczenie mojego projektu w pełnej implementacji IIS na serwerze WWW działa bardzo szybko, bez żadnych problemów.
- Wszystkie problemy mają Cassini, IIS Express 7.5 i IIS Express 8.0.
- Usuń wszystkie punkty przerwania nic nie robi.
- Czyste rozwiązanie lub usunięcie pliku .suo również nie rób nic.
- Jeśli naprawię IIS Express, usunę
My Docs\IISExpress
folder lub naprawię / ponownie zainstaluję Visual Studio → problem MOŻE zniknąć, ale tylko na chwilę, zanim wróci.
Wszelkie porady są mile widziane.
Aby odpowiedzieć na więcej pytań, tak, moja maszyna zdecydowanie ma moc. Irytujące jest to, że ten sam projekt, ze zmienionymi NICI, może czasami ładować się bardzo szybko, zwykle po naprawie IIS Express i usunięciu My Docs\IISExpress
folderu. W końcu „coś” się dzieje i ładowanie ponownie trwa do 2 minut. To, nad czym pracuję, nie jest skomplikowanym projektem. Brak zewnętrznych bibliotek i zależności, a mój VS.NET nie ma żadnych dodatków.
Warto zauważyć, że ten komputer ma program Symantec Endpoint Protection, który w przeszłości powodował spustoszenie. Ale całkowite wyłączenie go (dobrze być administratorem) nie rozwiązało problemu.
W tym momencie mam teorię. Myślę, że to wszystko dlatego, że pracuję nad przekierowanym folderem z udziału sieciowego. Gdy debugger przechodził przez setki linii „załadowanych symboli”, zatrzymałem się, aby zobaczyć, co robi. To było w moim kodzie, ładowałem DisplayTemplate, który miałem. Wchodząc do szablonu, wyjdź tak:
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'
Wygląda na to, że Visual Studio rekompiluje mój szablon informacji za każdym razem, gdy jest wywoływany, czyli setki razy. Moja teoria jest taka, że Visual Studio kompiluje plik, zapisuje go w udziale sieciowym, udział sieciowy następnie w jakiś sposób zaznacza nowy czas, a następnie Visual Studio myśli, że plik się zmienił, a zatem Visual Studio ponownie go kompiluje. Ale tylko teoria; Naprawdę nie mam pojęcia.
Po pierwsze, najwyraźniej mam pliki offline (jest to komputer stacjonarny w biurze; nie obchodzi mnie to mniej). Wyłączę, uruchomię ponownie i spróbuj ponownie jutro.
Dodatkowo przeniesienie mojego projektu do lokalnego C: naprawia go. Ładuje się bardzo szybko. Ale to nie jest idealne w środowisku pracy. Tracę poprzednie wersje, mój kod nie jest w ogóle tworzony, chyba że go ręcznie skopiuję i nie jest już udostępniany nikomu.
Mogę sobie poradzić z kopiowaniem go tam iz powrotem z C do udziału sieciowego, jeśli chodzi o to. O wiele bardziej irytujące jest czekanie dwóch minut na każde ładowanie strony.
Odpowiedzi:
Oto jak rozwiązałem problem „wolnego ładowania symbolu” w Visual Studio 2012:
Przejdź do Narzędzia -> Opcje -> Debugowanie -> Ogólne
Zaznacz pole wyboru obok „Włącz tylko mój kod”.
Przejdź do Narzędzia -> Opcje -> Debugowanie -> Symbole
Kliknij przycisk „...” i utwórz / wybierz nowy folder gdzieś na komputerze lokalnym, aby przechowywać symbole w pamięci podręcznej. Nazwałem mój „buforowanie symboli” i umieściłem go w Dokumentach -> Visual Studio 2012.
Kliknij „Załaduj wszystkie symbole” i poczekaj, aż symbole zostaną pobrane z serwerów Microsoft, co może chwilę potrwać. Pamiętaj, że przycisk Załaduj wszystkie symbole jest dostępny tylko podczas debugowania.
Usuń zaznaczenie pola wyboru obok opcji „Microsoft Symbol Servers”, aby uniemożliwić programowi Visual Studio zdalne wysyłanie zapytań do serwerów Microsoft.
Kliknij OK".
Odtąd ładowanie symboli powinno być znacznie szybsze.
Pamiętaj, że jeśli dokonasz zmian / pobrań do zestawów Microsoft, może być konieczne powrót do okna dialogowego Symbole i ponowne załadowanie wszystkich symboli.
źródło
Wyłączenie intelliTrace naprawiło to dla mnie.
W Visual Studio, Narzędzia -> Opcje -> IntelliTrace
Następnie usuń zaznaczenie pola wyboru „Włącz IntelliTrace”.
źródło
Nic z tego nie działało, ale znalazłem punkt przerwania na symbolu, który został usunięty. Wygląda na to, że 2010 się na tym trzymał. Aby sprawdzić, czy to jest twój problem, wykonaj debugowanie-> okna-> punkty przerwania. Jeśli takie istnieją, po prostu je usuń.
Saunders, wspomniany, sprawdził to, ale nie zostało to wspomniane w rozwiązaniach tego problemu. Może powszechna wiedza dla niektórych, ale nie dla wszystkich.
źródło
Usunąłem folder „Tymczasowe pliki ASP.NET”, a ładowanie mojej strony localhost znacznie się poprawiło. Oto ścieżka ...% temp% \ Tymczasowe pliki ASP.NET \
źródło
Czy masz włączony FusionLog?
Mój VisualStudio bardzo wolno uruchamiał się, otwierał rozwiązanie i ładował symbole podczas rozpoczynania debugowania. To było powolne tylko na moim komputerze, ale nie na innych komputerach.
FusionLog zapisuje mnóstwo logów na dysk. Wyłączenie go w RegEdit rozwiązało wszystko w moim przypadku.
To jest klucz FusionLog w rejestrze:
Sprawdź wartość ForceLog (1 włączone, 0 wyłączone).
źródło
FusionLog
dawno temu i zapomniałem wyłączyć. Teraz debugowanieASP.NET MVC
aplikacji jest znacznie szybsze. Dzięki Bogu i @rkawano. :)Napotkałem ten sam problem i wypróbowałem większość powyższych postanowień. Po prostu usunięcie plików pamięci podręcznej i plików tymczasowych kończy się dla mnie.
Spróbuj usunąć zawartość tych dwóch folderów:
i
C:\Users\\{UserName}\AppData\Local\Temp
(w szczególności foldery iisexpress i tymczasowe pliki ASP.NET).Można to ustawić tak, aby odbywało się to automatycznie po zalogowaniu się do systemu Windows poprzez dodanie pliku cmd do
C:\Users\\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
folderu o następującej treści:źródło
Myślę, że w końcu mogę przynajmniej poznać przyczynę, choć nie powód. Gdy problem zaczął się ponownie pojawiać, zauważyłem ton osieroconych procesów „conhost.exe”. Chciałbym zamknąć Visual Studio, a one pozostałyby otwarte. Kończenie zadania na każdym z nich w końcu niezawodnie rozwiązało problem. [ufnie]
(Uwaga: conhost.exe nie jest procesem Visual Studio, chociaż Visual Studio go używa. W związku z tym inni użytkownicy mogą mieć inne aplikacje, które uruchamiają conhost.exe. Wiem, że mój komputer nie, dlatego mogę bezpiecznie zakończ zadanie wszystkie oprócz YMMV.)
Dlaczego tak się dzieje? Wydaje się, że zdarza się, gdy otwieram więcej niż jeden projekt na raz, co zwykle robię często, mimo że w dowolnym momencie buduję i debuguję tylko jeden z nich.
Edytuj # 1 - Niestety nie jest to „srebrna kula”. Dla mnie to nie zawsze działa. Zwykle, gdy wszystko zwalnia, po prostu zamykam wszystkie sesje programu Visual Studio, a następnie wchodzę do menedżera zadań i kończę dowolne jego wystąpienie, conhost.exe, iisexpress.exe Microsoft.VisualStudio.Web.Host.exe i MSBuild.exe Mogę znaleźć.
Zazwyczaj po ponownym uruchomieniu projektu ładuje się on szybko. Ale nie zawsze.
Naprawdę myślę, że najlepszym rozwiązaniem jest prawdopodobnie nie budowanie i debugowanie kodu z przekierowanego udziału folderu / sieci.
Edycja nr 2 - Dwa lata później i wciąż jest to dla mnie problem w Visual Studio Community 2013, ale wydawało mi się, że przynajmniej znalazłem winowajcę: Explorer.exe . Tak, kto wiedział. W momencie, gdy kończę to zadanie, bam, strona ładuje się w ciągu jednej sekundy.
Jeśli mam otwartą przeglądarkę plików Eksploratora Windows na przekierowanym dysku sieciowym (co jest często spowodowane tym, że tam właśnie znajduje się mój kod), ten problem wydaje się występować. Zamknięcie okna to za mało, muszę zabić całe zadanie Explorer.exe. Mogłem tylko zgadywać, co to robi ... zwariować na punkcie uchwytów do plików?
Zwykle mogę użyć menedżera zadań, aby uruchomić nowe zadanie explorer.exe (mogę wziąć tylko tak dużo tabulacji), a Visual Studio będzie ładował się ładnie i szybko. Ale jeśli ponownie otworzę Eksploratora Windows, prawie zawsze wraca do super-slow-mo.
Więc jeśli masz przekierowany udział sieciowy, spróbuj. Z pewnością bije lokalnie.
źródło
Wszystkie powyższe są dobre rozwiązania i próbowałem wszystkie, ale mam rozwiązanie tutaj , to znaczy
źródło
Dla mnie był to IE 9.08.8112.16241. Gdy tylko użyłem przeglądarki Firefox lub Chrome, nie było powolnego debugowania za pomocą F10 lub F11. Nie wiem na czym polega problem z IE, ale oficjalnie gardzę teraz używaniem go do testowania.
Aktualizacja: wyłączyłem wszystkie dodatki programu IE i wróciło do pełnej prędkości. Włączenie ich pojedynczo ujawniło, że winowajcą był LastPass (w moim przypadku). Wydaje mi się, że wcale nie winię stwardnienia rozsianego.
źródło
Dla mnie zaimplementowałem tę wskazówkę, która zasadniczo drastycznie poprawiła wydajność, dodając następujące dwa atrybuty do znacznika kompilacji w pliku web.config
Co robi batch = "false"?
Co dokładnie robi optymalizacjeKompilacje? Źródło
Odniesienie: Element kompilacji na msdn
źródło
Miałem również problemy z wykonaniem podczas debugowania i próbowałem bardzo wielu opcji debugowania. W moim przypadku osiągnięto ogromną wydajność po zmianie tych opcji:
Narzędzia - Opcje - Debugowanie - Okno wyjściowe - (Ogólne ustawienia wyjściowe - Wszystkie dane wyjściowe debugowania) - WYŁ
źródło
W moim przypadku było to rozszerzenie .NET Reflector Visual Studio Extension (wersja 8.3.0.93) z VS 2012. Debugowanie trwało 10 sekund dla każdego kroku (F10).
W programie Visual Studio przejdź do Narzędzia / rozszerzenia i aktualizacje ... i wyłącz rozszerzenie .NET Reflector Visual Studio . Nie zapomnij ponownie uruchomić programu Visual Studio.
źródło
Miałem problemy z wolnym debugowaniem programu Visual Studio, gdy włączony był debuger „Kod macierzysty” . Spróbuj to wyłączyć.
W „Visual Studio 2012” przejdź do:
Mam nadzieję, że to pomoże.
Podobne pytania: 1 , 2
źródło
W moim przypadku tak było
Po usunięciu zaznaczenia, mój start debugowania skrócił się z 45-60 sekund do 0-5 sekund.
źródło
Pewnego razu po przerwie w zasilaniu musiałem stawić czoła temu samemu problemowi powolności za każdym razem, gdy trafiono punkt przerwania lub zgłaszano wyjątek.
Miałem niejasne wspomnienie, że plik „suo” (w tym samym katalogu co plik rozwiązania „sln”) może zostać uszkodzony i spowodować spowolnienie.
Usunąłem moje pliki „suo” i wszystko było w porządku. Usunięcie plików .suo jest nieszkodliwe i oznacza jedynie odtworzenie mojego układu systemu Windows oraz projektu początkowego i kilku innych niekrytycznych dostosowań.
źródło
.vs
folderu w późniejszych wersjach programu Visual Studio. Usuń to.Miałem również do czynienia z tym problemem, poniżej przedstawiam kroki, które wykonuję i zawsze działają dla mnie:
źródło
Nie wiem, czy nadal masz ten problem, ale debuguję witryny w programie Visual Studio, dołączając debugera do samego procesu, a nie pozwalając VS zrobić to za mnie, i zauważyłem, że znacznie poprawia to czasy. Używam rozszerzenia VS o nazwie AttachTo i mam mały artykuł na temat tego, jak go tutaj używać .
Mam nadzieję, że to pomoże.
źródło
Mój powolny problem VS został rozwiązany przez wyłączenie łącza przeglądarki
źródło
Jeśli ktoś zauważy, że to zachowanie wychodzi z lewego pola, sprawdź, czy nie masz żadnych punktów przerwania w pliku web.config. Musiałem ustawić jedno za pomocą przypadkowego kliknięcia myszą, a to naprawdę spowolniło wszystkie operacje debugowania.
źródło
Po spędzeniu całego dnia na czekaniu, aż symbole załadują się tak wolno jak prędkość żółwia, mieszanie i przełączanie między wszystkimi możliwymi kombinacjami: Just My Code, symbole buforowania , Intellitrace , Just-In-Time, procesy zabijania itp.
Moje rozwiązanie polegało na wyłączeniu programu antywirusowego . Tak, Windows Defender spowalniał uruchomienie mojego projektu! Sprawdziłby wszystkie biblioteki DLL zgodnie z żądaniami Visual Studio i spowolnił cały proces ładowania symboli.
Muszę powiedzieć, że nasze maszyny mają świetne specyfikacje, aby naprawdę szybko skompilować rozwiązanie, więc nigdy nie było problemu. Kodujemy w VS 2013 Ultimate.
źródło
Opróżnienie pamięci podręcznej symboli działało dla mnie.
Patrz: pasek menu / Narzędzia / Opcje / Debugowanie / Symbole / Opróżnij pamięć podręczną symboli
źródło
Podobny problem zmarnował połowę mojego dnia!
Ponieważ rozwiązanie mojego problemu różniło się od tego, co tu powiedziano, opublikuję go, aby mógł pomóc komuś innemu.
Mój był punktem zwrotnym. Miałem punkt przerwania „Przerwanie przy funkcji” (tzn. Zamiast naciskać F9 w wierszu kodu, tworzymy je za pomocą okna punktów przerwania), który powinien zatrzymać się w funkcji biblioteki poza moim projektem.
I miałem „Użyj Intellisense do zweryfikowania nazwy funkcji ” SPRAWDZONE. (Informacje tutaj .)
To spowolniło vs jak diabli (rozpoczęcie projektu od 2 sekund do 5 minut).
Usunięcie punktu przerwania rozwiązało go na dobre.
źródło
Jedną z rzeczy, które działały dla mnie po wykonaniu wszystkich powyższych czynności, było:
W oknie Wątki (Debugowanie-> Windows-> Wątki) ustaw Grupę na Brak. Można to zrobić tylko podczas debugowania.
Miało to wpływ nawet po zamknięciu tego okna.
źródło
W Visual Studio:
Narzędzia -> Opcje -> Debugowanie -> Symbole
Wybierz „Tylko określone moduły”. Kliknij link „określ moduły” i dodaj pusty moduł (kliknij przycisk nowego dokumentu i naciśnij OK).
źródło
Otwórz folder rozwiązania w Eksploratorze Windows, zamknij studio wizualne, usuń plik .suo z Eksploratora Windows.
Teraz otwórz projekt w studiu wizualnym, mam nadzieję, że debuger szybko się przyłączy / odłączy.
źródło
Dla mnie były to warunkowe punkty przerwania. Te wydają się naprawdę spowalniać.
źródło
Przejdź do zmiennych środowiskowych i poszukaj klucza _NT_SYMBOL_PATH.
Usuń to.
Voila, działała jak urok.
źródło
value == symsrv*symsrv.dll*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols
wciąż nie ma kości!Problemem była dla mnie funkcja „Link do przeglądarki”, która jest bardzo ciężka, gdy masz kilka kart otwartych dla tego samego projektu!
Ponieważ za każdym razem, gdy uruchamiamy projekt, otwiera się nowa karta z komunikacją przez łącze przeglądarki.
Wystarczy zamknąć wszystkie karty związane z projektem i pozostawić tylko jedną otwartą!
To darmowe studio wizualne natychmiast! To magia ! ;-)
źródło
Szybkie i łatwe rozwiązanie dla tych, którzy nie mają dużych odchyleń od domyślnych ustawień VS.
Narzędzia -> Ustawienia importu i eksportu -> Tak, zapisz moje bieżące ustawienia -> Visual C #
Jestem pewien, że powyższe rozwiązanie będzie działać również z innymi ustawieniami domyślnymi. W moim przypadku coś poszło nie tak z moimi ustawieniami ładowania symboli, ale nie mogłem tego naprawić, mimo że wypróbowałem sporo sugerowanych rozwiązań.
źródło
Upewnij się, że nie otworzyłeś programu Visual Studio w trybie administratora
Napotkałem ten problem i musiałem działać w trybie normalnym.
źródło