Question Débogage / chargement de Visual Studio très lent


Je suis à bout de nerfs. Visual Studio est typiquement péniblement lent à déboguer ou simplement charger ("démarrer sans déboguer") mes sites ASP.NET MVC. Pas toujours: au début, les projets se chargent bien et rapidement, mais une fois qu'ils se chargent lentement, ils se chargent toujours lentement par la suite. Je pourrais attendre 1-2 minutes ou plus.

Ma configuration:

j'utilise Visual Studio 2012 Express, actuellement, mais j'ai eu le même problème dans Visual Studio 2010 Express. Ma solution est stockée sur un lecteur réseau; Plus précisément, il s'agit de Mes documents redirigés vers un lecteur réseau, si cela est important. (Cela ne devrait pas. Il y a des moments où mon site se charge très rapidement dans cette configuration.)

Je charge habituellement Internet Explorer 9, mais le même problème se produit dans Firefox.

Cela peut se produire dans n'importe quel projet ASP.NET MVC sur lequel je travaille, et il semble tourner autour de DisplayTemplates, ce que font tous mes projets ASP.NET MVC. Et tout est C # et Razor, si cela importait.

Symptômes:

Le système va charger mes symboles des centaines de temps. Fondamentalement, ce qui suit, mais il y a au moins 300 de ces lignes, chacune avec des fichiers DLL un peu différents pour les mêmes 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.

Dans ce qui précède, j'ai trois modèles d'affichage: "Contact", "Location" et "StatusCode". Il semble qu'IIS charge les symboles deux fois pour chaque appel à displaytemplate. Ainsi, si j'affiche une table de 100 entrées qui appelle les trois modèles d'affichage, 600 symboles distincts sont chargés.

Ce n'est pas une opération rapide non plus. En regardant dans les fichiers journaux que IIS génère, il faut environ 200 ms pour chaque symbole à charger. Ainsi, des retards super-longs.

Ce que j'ai essayé:

  • Version Debug ou Release, peu importe.
  • Mettre mon projet sur une implémentation complète de IIS sur un serveur web fonctionne très rapidement sans problème.
  • Cassini, IIS Express 7.5 et IIS Express 8.0 posent tous le problème.
  • Supprimer tous les points d'arrêt ne fait rien.
  • Solution propreou en supprimant le fichier .suo ne fait rien non plus.
  • Si je répare IIS Express ou si je supprime le My Docs\IISExpress dossier, ou réparer / réinstaller Visual Studio → le problème PEUT disparaître, mais seulement pendant un moment, avant qu'il ne revienne tout de suite.

Tout conseil est apprécié.

Pour répondre à plus de questions, oui ma machine a définitivement la puissance. La chose exaspérante est que le même projet, avec NOTHING modifié, peut charger très très rapidement parfois, généralement après avoir réparé IIS Express et supprimer le My Docs\IISExpress dossier. Finalement, "quelque chose" arrive et il ne reste plus que 2 minutes à charger. Ce sur quoi je travaille n'est pas un projet compliqué. Pas de bibliothèques externes ou de dépendances, et mon VS.NET n'a pas d'addons quoi-que-jamais.

Il est à noter que cette machine est équipée de Symantec Endpoint Protection, qui a causé des ravages dans le passé. Mais le désactiver purement et simplement (c'est bien d'être administrateur) n'a pas résolu le problème.

J'ai une théorie à ce stade. Je pense que c'est tout parce que je travaille sur un dossier redirigé sur un partage réseau. Pendant que le débogueur parcourait ses centaines de lignes de "symboles chargés", je me suis arrêté pour voir ce qu'il faisait. C'était dans mon code, en chargeant le DisplayTemplate que j'avais. Entrer dans le modèle de sortie ceci:

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'

Il semble que Visual Studio recompile mon modèle d'affichage à chaque fois c'est appelé, ce qui est encore une fois des centaines de fois. Ma théorie est que Visual Studio compile le fichier, l'enregistre sur le partage réseau, le partage réseau l'estampille d'une certaine manière, et Visual Studio pense ensuite que le fichier a changé et que Visual Studio le recompile à nouveau. Seulement une théorie cependant; Je n'ai vraiment aucune idée.

D'une part, apparemment, j'ai des fichiers hors connexion (il s'agit d'un ordinateur de bureau dans un bureau; je m'en fiche). Je vais désactiver, redémarrer et réessayer demain.

De plus, déplacer mon projet tel quel vers le C local le corrige. Il se charge très rapidement. Mais ce n'est pas idéal dans un environnement de travail. Je perds les versions précédentes, mon code n'est pas sauvegardé du tout sauf si je le copie manuellement, et qu'il n'est plus partagé avec personne.

Je peux me contenter de le recopier de C vers le partage réseau, le cas échéant. Il est beaucoup plus ennuyeux d'attendre deux minutes pour chaque chargement de page.


424
2017-09-24 15:18


origine


Réponses:


Voici comment j'ai résolu le problème du "chargement lent de symboles" dans Visual Studio 2012:

  • Allez dans Outils -> Options -> Débogage -> Général

  • VÉRIFIEZ la coche à côté de "Activer juste mon code".

  • Allez dans Outils -> Options -> Débogage -> Symboles

  • Cliquez sur le bouton "..." et créez / sélectionnez un nouveau dossier quelque part sur votre ordinateur local pour stocker les symboles mis en cache. J'ai nommé le mien "Symbol caching" et l'ai mis dans Documents -> Visual Studio 2012.

  • Cliquez sur "Charger tous les symboles" et attendez que les symboles soient téléchargés depuis les serveurs de Microsoft, ce qui peut prendre un certain temps. Notez que le bouton Charger tous les symboles n'est disponible que pendant le débogage.

  • UNCHECK la coche à côté de "Microsoft Symbol Servers" pour empêcher Visual Studio d'interroger à distance les serveurs Microsoft.

  • Cliquez sur OK".

A partir de maintenant, le chargement des symboles devrait être beaucoup plus rapide.

Notez que si vous apportez des modifications / téléchargements aux assemblys Microsoft, vous devrez peut-être revenir dans la boîte de dialogue Symboles et "Charger tous les symboles" à nouveau.


555
2018-01-02 00:50



Éteindre intelliTrace a résolu cela pour moi.

Dans Visual Studio, Outils -> Options -> IntelliTrace

Ensuite, décochez la case "Activer IntelliTrace".

Disable IntelliTrace in Visual Studio 2012


99
2017-07-03 23:52



Rien de tout cela n'a fonctionné pour moi mais j'ai trouvé un Breakpoint sur un symbole qui a été effacé. Semble 2010 était accroché dessus. Pour voir si c'est votre problème, debug-> windows-> breakpoints S'il y en a, supprimez-les.

Saunders, a mentionné qu'il a vérifié pour cela, mais il n'a pas été mentionné dans les solutions à ce problème. Peut-être une connaissance commune pour certains, mais pas pour nous tous.


68
2018-03-28 19:34



J'ai supprimé le dossier "Fichiers ASP.NET temporaires" et mon chargement de page localhost s'est considérablement amélioré. Voici le chemin ...% temp% \ Fichiers ASP.NET temporaires \


37
2017-09-04 15:01



Je pense que je peux finalement au moins connaître la cause, mais pas la raison pour laquelle. Lorsque le problème a commencé à se produire à nouveau, j'ai remarqué une tonne de processus "conhost.exe" orphelins. Je fermerais Visual Studio et ils resteraient ouverts. Fin de tâche sur chacun d'eux a finalement, résolu de manière fiable le problème. [espérons]

(Notez que conhost.exe n’est pas un processus Visual Studio, même si Visual Studio l’utilise. Par conséquent, d’autres utilisateurs peuvent utiliser conhost.exe sur d’autres applications. terminer en toute sécurité la tâche tous sauf YMMV.)

Pourquoi cela se produit-il? Cela semble se produire lorsque j'ouvre plusieurs projets à la fois, ce que je fais souvent, même si je ne construis et ne débogue que l'un d'eux à tout moment.


Edit # 1 - Ce n'est pas une "solution miracle" malheureusement. Cela ne marche pas toujours pour moi. Généralement, lorsque les choses ralentissent, je ferme simplement toutes mes sessions Visual Studio, puis entre dans le gestionnaire de tâches et en termine toutes les instances, conhost.exe, iisexpress.exe, Microsoft.VisualStudio.Web.Host.exe et MSBuild.exe. Je peux trouver.

Généralement, après cela, lorsque je redémarre mon projet, il se charge rapidement. Mais pas toujours.

Vraiment je pense que le meilleur plan d'action est probablement de ne pas construire et déboguer le code d'un dossier / partage réseau redirigé.


Modifier # 2 - Deux ans plus tard, et c'est encore un problème pour moi dans Visual Studio Community 2013, mais je semblais au moins trouver la tâche coupable: Explorer.exe. Ouais, qui savait. Au moment où je termine cette tâche, bam, la page se charge en une seconde.

Si un explorateur de fichiers Windows Explorer est ouvert sur mon lecteur réseau redirigé (ce qui est souvent le cas lorsque mon code est), ce problème semble se produire. Fermer la fenêtre ne suffit pas, je dois tuer toute la tâche Explorer.exe. Je ne pouvais que deviner ce qu'il faisait ... devenir fou avec des poignées de fichiers?

Je peux généralement utiliser le gestionnaire de tâches pour démarrer une nouvelle tâche explorer.exe (je ne peux que prendre autant de tabulations), et Visual Studio continuera à charger rapidement. Mais si j'ouvre à nouveau Windows Explorer, cela revient presque toujours à un super slow-mo.

Donc, si vous avez un partage réseau redirigé, essayez-le. Il vaut mieux travailler localement.


25
2017-09-25 13:47



Avez-vous activé FusionLog?

Mon VisualStudio était très lent à démarrer, ouvrir la solution et charger les symboles lors du démarrage du débogage. C'était lent seulement sur ma machine, mais pas sur d'autres machines.

FusionLog écrit des tonnes de fichiers journaux sur le disque. Juste le désactiver sur RegEdit résolu tout, sur mon cas.

C'est la clé FusionLog sur le registre:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

Vérifiez la valeur ForceLog (1 activé, 0 désactivé).


24
2017-07-03 14:16



Ce qui précède sont toutes de bonnes solutions et j'ai essayé tous, mais j'ai obtenu la solution ici, qui est de

Debug -> Delete All Breakpoints

21
2017-09-06 15:30