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.
0 votes
Pour revenir sur la question de l'antivirus, j'ai eu de gros problèmes avec le fonctionnement de ThreatFire. Le fait de le désactiver temporairement a accéléré le débogueur, du moins pour moi, d'une centaine de fois. La désactivation de mon antivirus principal (Avast !) n'a que peu aidé.
0 votes
@JohnSaunders Avez-vous essayé de l'exécuter en mode administrateur ? stackoverflow.com/questions/36322440/
0 votes
Vérifiez la FREQUENCE de votre CPU et la TEMPÉRATURE DU CORE !!!! Mon ordinateur ne fonctionnait qu'à 20% de sa capacité. Maintenant, tout est à nouveau parfait après avoir réinstallé mon processeur avec une nouvelle pâte thermique.