Sono alla fine. Visual Studio è in genere dolorosamente lento nel debug o semplicemente carica ("avvia senza debug") i miei siti MVC ASP.NET. Non sempre: all'inizio i progetti si caricheranno bene e velocemente, ma una volta caricati lentamente, dopo caricheranno sempre lentamente. Potrei aspettare 1-2 minuti o più.
La mia configurazione:
Attualmente sto usando Visual Studio 2012 Express , ma ho avuto lo stesso problema anche in Visual Studio 2010 Express. La mia soluzione è memorizzata su un'unità di rete; in particolare, è My Documents reindirizzato su un'unità di rete, se è importante. (Non dovrebbe. Ci sono volte in cui il mio sito si carica molto velocemente con questa configurazione.)
Carico in Internet Explorer 9 di solito, ma lo stesso problema si verifica in Firefox.
Questo può accadere in qualsiasi progetto ASP.NET MVC su cui lavoro, e sembra ruotare attorno a DisplayTemplates, come fanno tutti i miei progetti ASP.NET MVC. Ed è tutto C # e Razor, se questo è importante.
Sintomi:
Il sistema caricherà i miei simboli centinaia di volte. Fondamentalmente, il seguente, ma ci sono almeno 300 di queste righe, ognuna con file DLL sempre leggermente diversi per gli stessi 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.
In quanto sopra, ho tre DisplayTemplates: "Contact", "Location" e "StatusCode". Sembra che IIS stia caricando due volte simboli per ogni volta che viene chiamato il displaytemplate. Pertanto, se sto visualizzando una tabella di 100 voci che chiama tutte e tre queste piastre di visualizzazione, sono caricati 600 simboli separati.
Neanche questa è un'operazione veloce. Esaminando i file di registro generati da IIS, sono necessari circa 200 ms per caricare ciascun simbolo. Pertanto, ritardi super lunghi.
Cosa ho provato:
- Debug o versione di rilascio, non importa.
- Mettere il mio progetto su un'implementazione IIS completa su un server Web lo esegue in modo superveloce senza problemi.
- Cassini, IIS Express 7.5 e IIS Express 8.0 presentano tutti il problema.
- Elimina tutti i punti di interruzione non fa nulla.
- Anche Clean Solution o l'eliminazione di .suo non fanno nulla.
- Se riparo IIS Express, o cancello la
My Docs\IISExpress
cartella, o riparo / reinstallo Visual Studio → il problema PUO 'andare via, ma solo per un po', prima che torni indietro.
Qualsiasi consiglio è apprezzato.
Per rispondere a più domande, sì, la mia macchina ha sicuramente la potenza. La cosa esasperante è che lo stesso progetto, con NIENTE alterato, può caricarsi molto rapidamente a volte, in genere dopo aver riparato IIS Express ed eliminato la My Docs\IISExpress
cartella. Alla fine succede "qualcosa" ed è necessario caricare nuovamente 2 minuti. Quello a cui sto lavorando non è un progetto complicato. Nessuna libreria o dipendenza esterna e il mio VS.NET non ha componenti aggiuntivi.
Da notare che questa macchina ha Symantec Endpoint Protection, che ha una storia di caos. Ma disabilitarlo completamente (è bene essere un amministratore) non ha risolto il problema.
Ho una teoria a questo punto. Sto pensando che tutto questo perché sto lavorando su una cartella reindirizzata da una condivisione di rete. Mentre il debugger stava attraversando le sue centinaia di righe di "simboli caricati", ho fatto una pausa per vedere cosa stava facendo. Era nel mio codice, caricando il DisplayTemplate che avevo. Entrando nell'output del modello questo:
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'
Sembra che Visual Studio stia ricompilando il mio displaytemplate ogni volta che viene chiamato, ancora una volta, centinaia di volte. La mia teoria è che Visual Studio compila il file, lo salva nella condivisione di rete, la condivisione di rete quindi in qualche modo imprime un nuovo tempo su di esso e Visual Studio pensa quindi che il file sia cambiato e quindi Visual Studio lo ricompila di nuovo. Solo una teoria però; Non ne ho davvero idea.
Per uno, a quanto pare ho i file offline su (questo è un computer desktop in un ufficio; non me ne può fregare di meno). Domani disabiliterò, riavvio e riproverò.
Inoltre, spostare il mio progetto così com'è nella C locale: risolverlo. Si carica molto rapidamente. Ma questo non è l'ideale in un ambiente di lavoro. Perdo versioni precedenti, non viene eseguito il backup del mio codice se non lo copio manualmente e non viene più condiviso con nessuno.
Posso accontentarmi di copiarlo avanti e indietro da C alla condivisione di rete, se si tratta di esso. È molto più fastidioso aspettare due minuti per ogni caricamento della pagina.