570 votes

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

Je suis à bout de souffle. Visual Studio est généralement douloureusement lent à déboguer ou tout 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 peux attendre 1 à 2 minutes ou plus.

Mon installation :

J'utilise Visual Studio 2012 Express 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 a de l'importance. (Cela ne devrait pas être le cas. Il y a des moments où mon site se charge très rapidement sous cette configuration).

Je charge en général dans 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 cela semble tourner autour de l'utilisation de DisplayTemplates, ce que font tous mes projets ASP.NET MVC. Et c'est tout C# et Razor, si ça compte.

Symptômes :

Le système va charger mes symboles des centaines de temps. En gros, c'est la même chose, mais il y a au moins 300 lignes de ce type, chacune avec des fichiers DLL légèrement 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 l'exemple ci-dessus, j'ai trois DisplayTemplates : "Contact", "Localisation" et "StatusCode". Il semble que IIS charge les symboles deux fois à chaque fois que le modèle d'affichage est appelé. Ainsi, si j'affiche un tableau de 100 entrées qui font appel à ces trois modèles d'affichage, 600 symboles distincts sont chargés.

Ce n'est pas non plus une opération rapide. Les fichiers journaux que IIS génère mettent environ 200 ms pour que chaque symbole soit chargé. D'où des délais super longs.

Ce que j'ai essayé :

  • Version Debug ou Release, cela n'a pas d'importance.
  • En plaçant mon projet sur une implémentation complète d'IIS sur un serveur web, il fonctionne très rapidement et sans problème.
  • Cassini, IIS Express 7.5, et IIS Express 8.0 ont tous le problème.
  • Supprimer tous les points d'arrêt ne fait rien.
  • Solution propre ou la suppression du fichier .suo ne donnent rien non plus.
  • Si je répare IIS Express, ou si je supprime le fichier My Docs\IISExpress ou réparer/réinstaller Visual Studio, le problème PEUT disparaître, mais seulement pendant un certain temps avant de revenir.

Tout conseil est le bienvenu.

Pour répondre à d'autres questions, oui, ma machine a vraiment de la puissance. Ce qui est exaspérant, c'est que le même projet, sans que RIEN n'ait été modifié, peut parfois se charger très rapidement, généralement après avoir réparé IIS Express et supprimé le fichier My Docs\IISExpress dossier. Finalement, "quelque chose" se produit et le chargement ne prend plus que deux minutes. Ce sur quoi je travaille n'est pas un projet compliqué. Il n'y a pas de bibliothèques ou de dépendances externes et mon VS.NET n'a pas d'add-ons.

Il est à noter que cette machine est équipée de Symantec Endpoint Protection, qui a l'habitude de faire des ravages. Mais sa désactivation pure et simple (c'est bien d'être administrateur) n'a pas réglé le problème.

J'ai une théorie à ce stade. Je pense que tout ceci est dû au fait que je travaille à partir d'un dossier redirigé sur un réseau partagé. 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. Il était dans mon code, chargeant le DisplayTemplate que j'avais. En entrant dans le modèle, on obtient 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 il est appelé, ce qui est encore, des centaines de fois. Ma théorie est que Visual Studio compile le fichier, l'enregistre sur le partage réseau, puis y appose une nouvelle heure, et Visual Studio pense alors que le fichier a changé. Ainsi, Visual Studio le recompile encore une fois. Mais ce n'est qu'une théorie, je n'en ai vraiment aucune idée.

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

De plus, déplacer mon projet, tel quel, sur le C : local le résout. Il se charge très rapidement. Mais ce n'est pas l'idéal dans un environnement de travail. Je perds les versions précédentes, mon code n'est pas sauvegardé du tout à moins que je ne le copie manuellement, et il n'est plus partagé avec personne.

Je peux me contenter de le copier dans les deux sens de C vers le partage netwrk s'il le faut. C'est beaucoup plus ennuyeux d'attendre deux minutes pour chaque chargement de page.

0 votes

J'ai beaucoup de questions : Qu'en est-il de la machine sur laquelle vous le faites tourner ? A-t-elle assez de puissance pour ce que vous essayez de faire ? Avez-vous des plugins tiers ? Quel type d'antivirus avez-vous ?

1 votes

J'ai mis à jour ma question avec plus d'informations.

0 votes

La suppression des fichiers hors ligne semblait être la seule solution. Cela a bien fonctionné pendant un certain temps, puis le problème est revenu. Mais j'ai une autre réponse possible. Je mets à jour ma solution.

748voto

Zeb Kimmel Points 1814

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

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

  • Cochez la case à 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 placé 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.

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

  • Cliquez sur "OK".

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

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

2 votes

Génial, ça a réglé le problème pour moi aussi. J'avais activé tous ces symboles il y a un moment pour passer par le code source MVC.

33 votes

Pas de solution pour moi, j'en ai peur. Ce serait une bonne solution pour ceux qui ont des problèmes avec les symboles Microsoft. Malheureusement pour moi, mon problème semble tourner autour de mes propres symboles. Ces symboles sont déjà en mémoire cache locale et, pour une raison quelconque, ils compilent des centaines de tuiles en un seul chargement de page.

11 votes

Merci pour cette astuce un problème que je rencontre ici est le bouton de chargement de tous les symboles est désactivé pour moi des idées ?

127voto

moke Points 288

Désactiver intelliTrace a réglé le problème pour moi.

Dans Visual Studio, Outils -> Options -> IntelliTrace

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

Disable IntelliTrace in Visual Studio 2012

0 votes

Ça a marché pour moi. Intellitrace ralentissait VS2012 à un point tel qu'un site MVC4 flambant neuf perdait son temps à la première exécution.

2 votes

J'ai rencontré ce problème lors de l'exécution d'un de mes tests unitaires. Cela prenait environ 300 secondes lorsque l'intellitrace était activé et environ 14 secondes lorsqu'il était désactivé. Cette correction a vraiment fonctionné pour moi.

2 votes

J'ai amélioré mon démarrage de 25 secondes à 6. Je pense que ça a beaucoup aidé parce que j'exécutais beaucoup de mon propre code au démarrage de l'application.

81voto

user2144480 Points 345

Rien de tout cela n'a fonctionné pour moi mais j'ai trouvé un point d'arrêt sur un symbole qui a été supprimé. Il semble que 2010 s'y accrochait. Pour voir si c'est votre problème, faites debug->Windows->breakpoints S'il y en a, supprimez-les.

Saunders, a mentionné qu'il avait vérifié cela mais que cela n'était pas mentionné dans les solutions pour ce problème. Peut-être que certains le savent, mais pas tous.

5 votes

J'ai commencé à avoir ce problème dans VS2010 tout à coup, et c'était, en effet, un de mes points d'arrêt qui en était la cause. Dès que j'ai effacé mes points d'arrêt, il est redevenu rapide.

4 votes

Wow..VS2012 a été rampant, 5 mins juste pour construire un projet simple. J'ai effacé tous les points d'arrêt et c'est à nouveau rapide comme l'éclair, merci !

1 votes

Après avoir lu et suivi ce que vous avez dit, j'ai trouvé un point d'arrêt qui, d'une manière ou d'une autre, a été placé dans le code XML de l'un de mes fichiers d'entité edmx. Vous êtes un homme/femme.

44voto

Shaun Kennedy Points 71

J'ai supprimé le dossier "Temporary ASP.NET Files" et le chargement des pages de mon hôte local s'est considérablement amélioré. Voici le chemin d'accès... %temp%... \Temporary Fichiers ASP.NET

10 votes

C:\Users\ {USER_NAME} \AppData\Local\Temp est le chemin et le dossier "AppData" est un dossier caché.

2 votes

J'ai trouvé 1GB de vieilles merdes ici..... Supprimez tout et le VS fonctionne un peu mieux. :)

25voto

Ber'Zophus Points 1000

Je pense que je connais enfin la cause, mais pas la raison. Lorsque le problème a recommencé à se produire, j'ai remarqué qu'une tonne de processus "conhost.exe" étaient orphelins. Je fermais Visual Studio et ils restaient ouverts. Terminer la tâche sur chacun d'entre eux a finalement résolu le problème de manière fiable. [espérons-le]

(Notez que conhost.exe n'est pas un processus Visual Studio, bien que Visual Studio l'utilise. Ainsi, d'autres utilisateurs peuvent avoir d'autres applications qui exécutent conhost.exe. Je sais que ma machine n'en a pas, c'est pourquoi je peux en toute sécurité mettre fin à toutes les tâches, mais YMMV).

Pourquoi cela arrive-t-il ? Il semble se produire lorsque j'ouvre plus d'un projet à la fois, ce que j'ai tendance à faire souvent, même si je ne construis et ne débogue qu'un seul d'entre eux à la fois.


Edit #1 - Ce n'est pas une "solution miracle" malheureusement. Cela ne fonctionne pas toujours pour moi. En général, lorsque les choses deviennent lentes, je ferme toutes mes sessions Visual Studio, puis j'entre dans le gestionnaire de tâches et j'arrête toutes les instances de conhost.exe, iisexpress.exe, Microsoft.VisualStudio.Web.Host.exe et MSBuild.exe que je peux trouver.

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

Je pense vraiment que la meilleure solution est de ne pas construire et déboguer du code à partir d'un dossier ou d'un réseau partagé redirigé.


Edit #2 - Deux ans plus tard, et c'est toujours un problème pour moi dans Visual Studio Community 2013, mais j'ai au moins réussi à trouver la tâche coupable : Explorer.exe . Oui, qui l'eut cru. Au moment où je termine cette tâche, bam, la page se charge en une seule seconde.

Si j'ai un navigateur de fichiers Windows Explorer ouvert sur mon lecteur réseau redirigé (ce qui est souvent le cas puisque c'est là que se trouve mon code), ce problème semble se produire. Fermer la fenêtre n'est pas suffisant, je dois tuer toute la tâche Explorer.exe. Je ne peux que deviner ce qu'il fait... il s'amuse à manipuler des fichiers ?

Je peux généralement utiliser le gestionnaire de tâches pour lancer une nouvelle tâche explorer.exe (je ne peux pas supporter autant de "alt-tabbing"), et Visual Studio continuera à se charger rapidement. Mais si je rouvre l'Explorateur Windows, il repasse presque toujours en mode super lent.

Donc, si vous avez un partage de réseau redirigé, essayez-le. C'est mieux que de travailler en local.

0 votes

Je sais que c'est une nouvelle un peu ancienne, mais j'ai eu le même problème. Mon équipe m'a suggéré d'utiliser un build script qui copiait les fichiers de ma source locale à l'endroit où les fichiers étaient exécutés et chaque fois que j'exécutais ce sous-programme par lui-même, il créait un conhost.exe et ne le fermait pas. Une fois que j'ai mis fin à toutes les copies supplémentaires de ce sous-programme, il a de nouveau fonctionné à la vitesse de l'éclair.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X