Estoy al final del juicio. Visual Studio suele ser extremadamente lento para depurar o simplemente cargar ("iniciar sin depurar") mis sitios ASP.NET MVC. No siempre: al principio, los proyectos se cargarán bien y rápido, pero una vez que se carguen lentamente, siempre se cargarán lentamente después de eso. Podría estar esperando 1-2 minutos o más.
Mi configuración:
Actualmente estoy usando Visual Studio 2012 Express , pero también he tenido el mismo problema en Visual Studio 2010 Express. Mi solución está almacenada en una unidad de red; específicamente, es Mis documentos redirigidos a una unidad de red, si es importante. (No debería. Hay veces en que mi sitio se carga muy rápido con esta configuración).
Por lo general, cargo en Internet Explorer 9, pero el mismo problema ocurre en Firefox.
Esto puede suceder en cualquier proyecto ASP.NET MVC en el que trabajo, y parece girar en torno a tener DisplayTemplates, lo que hacen todos mis proyectos ASP.NET MVC. Y todo es C # y Razor, si eso importaba.
Síntomas
El sistema cargará mis símbolos cientos de veces. Básicamente, lo siguiente, pero hay al menos 300 de esas filas, cada una con archivos DLL muy diferentes para los mismos 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.
En lo anterior, tengo tres DisplayTemplates: "Contacto", "Ubicación" y "Código de estado". Parece que IIS está cargando símbolos dos veces por cada vez que se llama a la plantilla de visualización. Por lo tanto, si estoy mostrando una tabla de 100 entradas que llama a estas tres plantillas de visualización, hay 600 símbolos separados cargados.
Esta tampoco es una operación rápida. Al buscar en los archivos de registro que genera IIS, se tarda unos 200 ms en cargar cada símbolo. Por lo tanto, retrasos súper largos.
Lo que he probado:
- Versión de depuración o lanzamiento, no importa.
- Poner mi proyecto en una implementación completa de IIS en un servidor web lo ejecuta súper rápido sin problemas.
- Cassini, IIS Express 7.5 e IIS Express 8.0 tienen el problema.
- Eliminar todos los puntos de interrupción no hace nada.
- Solución limpia , o eliminar el .suo tampoco hacen nada.
- Si reparo IIS Express, o elimino la
My Docs\IISExpress
carpeta, o reparo / reinstalo Visual Studio → el problema PUEDE desaparecer, pero solo por un tiempo, antes de que vuelva.
Cualquier consejo en absoluto es apreciado.
Para responder más preguntas, sí, mi máquina definitivamente tiene la potencia. Lo irritante es que el mismo proyecto, con NADA alterado, puede cargarse muy rápidamente a veces, generalmente después de reparar IIS Express y eliminar la My Docs\IISExpress
carpeta. Eventualmente, "algo" sucede y la carga de nuevo se reduce a 2 minutos. En lo que estoy trabajando no es un proyecto complicado. No hay bibliotecas externas ni dependencias, y mi VS.NET no tiene complementos.
Cabe destacar que esta máquina tiene Symantec Endpoint Protection, que tiene un historial de causar estragos. Pero deshabilitarlo por completo (es bueno ser administrador) no solucionó el problema.
Tengo una teoría en este punto. Estoy pensando que todo esto es porque estoy trabajando desde una carpeta redirigida desde un recurso compartido de red. Mientras el depurador pasaba por sus cientos de líneas de "símbolos cargados", hice una pausa para ver qué estaba haciendo. Estaba en mi código, cargando el DisplayTemplate que tenía. Entrando en la plantilla de salida esto:
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'
Parece que Visual Studio está volviendo a compilar mi plantilla de pantalla cada vez que se llama, que es nuevamente, cientos de veces. Mi teoría es que Visual Studio compila el archivo, lo guarda en el recurso compartido de red, el recurso compartido de red de alguna manera marca una nueva hora y Visual Studio cree que el archivo ha cambiado y, por lo tanto, Visual Studio lo vuelve a compilar nuevamente. Sin embargo, solo una teoría; Realmente no tengo idea.
Por un lado, aparentemente tengo archivos sin conexión (esta es una computadora de escritorio en una oficina; no podría importarme menos). Voy a deshabilitar, reiniciar y volver a intentar mañana.
Además, mover mi proyecto, tal como está, a la C local: lo corrige. Se carga muy rápido. Pero esto no es ideal en un entorno de trabajo. Pierdo versiones anteriores, mi código no está respaldado en absoluto a menos que lo copie manualmente, y ya no se comparte con nadie.
Puedo hacerlo copiando de ida y vuelta desde C al recurso compartido de red, si se trata de ello. Es mucho más molesto esperar dos minutos por cada carga de página.