Je suis à bout de souffle. Visual Studio est généralement très lent à déboguer ou à charger simplement ("démarrer sans déboguer") mes sites ASP.NET MVC. Pas toujours: au début, les projets se chargeront bien et rapidement, mais une fois qu'ils se chargeront lentement, ils se chargeront toujours lentement après cela. Je pourrais attendre 1-2 minutes ou plus.
Ma configuration:
J'utilise Visual Studio 2012 Express , actuellement, mais j'ai également rencontré le même problème dans Visual Studio 2010 Express. Ma solution est stockée sur un lecteur réseau; en particulier, il s'agit de Mes documents redirigés vers un lecteur réseau, si cela est important. (Cela ne devrait pas. Parfois, mon site se charge très rapidement avec cette configuration.)
Je charge généralement 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'affichage de modèles, ce que font tous mes projets ASP.NET MVC. Et c'est tout C # et Razor, si cela importait.
Symptômes:
Le système chargera mes symboles des centaines de fois. Fondamentalement, ce qui suit, mais il existe au moins 300 lignes de ce type, chacune avec des fichiers DLL toujours très 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", "Emplacement" et "StatusCode". Il semble que IIS charge deux fois les symboles pour chaque appel du modèle d'affichage. Ainsi, si j'affiche un tableau de 100 entrées qui appelle ces trois modèles d'affichage, c'est 600 symboles distincts chargés.
Ce n'est pas non plus une opération rapide. Dans les fichiers journaux générés par IIS, il faut environ 200 ms pour charger chaque symbole. Ainsi, des retards super longs.
Ce que j'ai essayé:
- Version de débogage ou de version, cela n'a pas d'importance.
- Mettre mon projet sur une implémentation complète d'IIS sur un serveur Web l'exécute très rapidement sans aucun 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.
- Nettoyer la solution ou supprimer le .suo ne fait rien non plus.
- Si je répare IIS Express, ou supprime le
My Docs\IISExpress
dossier, ou répare / réinstalle Visual Studio → le problème PEUT disparaître, mais seulement pendant un certain temps, avant qu'il ne revienne immédiatement.
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 RIEN modifié, peut parfois se charger très très rapidement, généralement après avoir réparé IIS Express et supprimé le My Docs\IISExpress
dossier. Finalement, "quelque chose" se produit et il ne reste plus que 2 minutes pour charger à nouveau. 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 aucun add-on.
Il convient de noter que cette machine dispose de Symantec Endpoint Protection, qui a toujours causé des ravages. Mais sa désactivation pure et simple (il est bon 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 m'arrêtai pour voir ce qu'il faisait. C'était dans mon code, chargeant le DisplayTemplate que j'avais. Entrer dans le modèle affiche 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 qu'il est appelé, ce qui est à nouveau 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 marque alors une nouvelle heure dessus, et Visual Studio pense alors que le fichier a changé et donc Visual Studio le recompile à nouveau. Mais seulement une théorie; Je n'ai vraiment aucune idée.
D'une part, j'ai apparemment des fichiers hors ligne (c'est un ordinateur de bureau dans un bureau; je m'en fiche). Je vais désactiver, redémarrer et réessayer demain.
De plus, le déplacement de 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 il n'est plus partagé avec personne.
Je peux me contenter de le copier d'avant en arrière de C vers le partage réseau, si cela se produit. Il est beaucoup plus ennuyeux d'attendre deux minutes pour chaque chargement de page.