asp.net-mvc - tutorial - tag helpers asp net core
Visual Studio depuraciĆ³n/carga muy lenta (30)
¿Tienes habilitado FusionLog?
Mi VisualStudio tardó mucho en iniciarse, abrió la solución y cargó los símbolos al iniciar la depuración. Solo fue lento en mi máquina, pero no en otras máquinas.
FusionLog escribe toneladas de material de registro en el disco. Solo deshabilitándolo en RegEdit resolví todo, en mi caso.
Esta es la clave FusionLog en el registro:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Fusion
Verifique el valor de ForceLog (1 habilitado, 0 deshabilitado).
Estoy en el final de ingenio. Normalmente, Visual Studio es extremadamente lento para depurar o simplemente cargar ("comenzar sin depurar") mis sitios MVC de ASP.NET. No siempre: al principio, los proyectos se cargarán bien y rápido, pero una vez que se cargan 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 se almacena en una unidad de red; específicamente, es Mis documentos redirigidos a una unidad de red, si es importante. (No debería. Hay momentos en los que mi sitio se carga muy rápido con esta configuración).
La carga en Internet Explorer 9 normalmente, pero el mismo problema ocurre en Firefox.
Esto puede suceder en cualquier proyecto MVC de ASP.NET en el que trabaje, 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 importara.
Los síntomas:
El sistema cargará mis símbolos cientos de veces. Básicamente, lo siguiente, pero hay al menos 300 filas de este tipo, cada una con archivos DLL muy diferentes para el mismo 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 pantalla. Por lo tanto, si muestro una tabla de 100 entradas que llama a las tres plantillas de pantalla, se cargan 600 símbolos diferentes.
Esto 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. Así, los retrasos súper largos.
Lo que he intentado:
- Versión de depuración o versión, 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.
- Delete All Breakpoints no hace nada.
- Solución limpia , o eliminar el .suo tampoco hacer nada.
- Si reparo IIS Express, o
My Docs/IISExpress
carpetaMy Docs/IISExpress
, o reparo / reinstalo Visual Studio → el problema PUEDE desaparecer, pero solo por un tiempo, antes de que regrese.
Cualquier consejo 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 carpeta My Docs/IISExpress
. Finalmente, "algo" sucede y la carga se reduce a 2 minutos. Lo que estoy trabajando no es un proyecto complicado. No hay bibliotecas o dependencias externas, 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 esto es todo porque estoy trabajando desde una carpeta redirigida fuera de una red compartida. Mientras el depurador estaba revisando sus cientos de líneas de "símbolos cargados", me detuve 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á recompilando mi plantilla de pantalla cada vez que se llama, lo cual 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 entonces de alguna manera marca un nuevo tiempo en él, y Visual Studio luego piensa que el archivo ha cambiado y, por lo tanto, Visual Studio lo vuelve a compilar. Aunque solo una teoría; Realmente no tengo ni idea.
Por un lado, aparentemente tengo archivos sin conexión (esta es una computadora de escritorio en una oficina; no me importaría menos). Voy a deshabilitar, reiniciar y volver a intentar mañana.
Además, mover mi proyecto, tal como está, a la C local: lo arregla. Se carga muy rápido. Pero esto no es ideal en un entorno de trabajo. Pierdo las versiones anteriores, no se realiza una copia de seguridad de mi código a menos que lo copie manualmente y ya no se comparta con nadie.
Me conformo con copiarlo de un lado a otro de 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.
Abra la carpeta de soluciones en el explorador de Windows, cierre el estudio visual, elimine el archivo .suo del explorador de Windows.
Ahora abra el proyecto en Visual Studio, con suerte el depurador se adjuntará / desconectará rápidamente.
Apagando intelliTrace solucioné esto para mí.
En Visual Studio, Herramientas -> Opciones -> IntelliTrace
Luego, desmarque la casilla de verificación "Habilitar IntelliTrace".
Aquí es cómo resolví el problema de "carga lenta de símbolos" en Visual Studio 2012:
Vaya a Herramientas -> Opciones -> Depuración -> General
COMPRUEBE la marca de verificación junto a "Habilitar solo mi código".
Vaya a Herramientas -> Opciones -> Depuración -> Símbolos
Haga clic en el botón "..." y cree / seleccione una nueva carpeta en algún lugar de su computadora local para almacenar los símbolos en caché. Nombré el mío "Caché de símbolos" y lo puse en Documentos -> Visual Studio 2012.
Haga clic en "Cargar todos los símbolos" y espere a que se descarguen los símbolos de los servidores de Microsoft, lo que puede demorar un poco. Tenga en cuenta que el botón Cargar todos los símbolos solo está disponible durante la depuración.
DESCARGUE la marca de verificación junto a "Microsoft Symbol Servers" para evitar que Visual Studio consulte de forma remota los servidores de Microsoft.
Haga clic en Aceptar".
A partir de ahora, la carga de símbolos debería ser mucho más rápida.
Tenga en cuenta que si realiza cambios / descargas en los conjuntos de Microsoft, es posible que deba volver al cuadro de diálogo Símbolos y "Cargar todos los símbolos" nuevamente.
Creo que finalmente puedo al menos conocer la causa, aunque no la razón. Cuando el problema comenzó a ocurrir nuevamente, noté que había toneladas de procesos "conhost.exe" huérfanos. Cerraría Visual Studio y se mantendrían abiertos. La tarea final en cada uno de ellos finalmente ha resuelto el problema de manera confiable. [Ojalá]
(Solo tenga en cuenta que conhost.exe no es un proceso de Visual Studio, aunque Visual Studio lo usa. Por lo tanto, otros usuarios pueden tener otras aplicaciones que ejecuten conhost.exe. Sé que mi máquina no, por eso puedo terminar la tarea de forma segura todos ellos, pero YMMV.)
En cuanto a por qué sucede esto? Parece que ocurre cuando abro más de un proyecto a la vez, lo que tiendo a hacer a menudo, aunque solo construyo y depuro uno de ellos en cualquier momento.
Edit # 1 - Esto no es una "bala de plata" por desgracia. No siempre funciona para mí. Normalmente, cuando las cosas se vuelven lentas, solo cierro todas mis sesiones de Visual Studio, luego entro al administrador de tareas y finalizo cualquier instancia, conhost.exe, iisexpress.exe Microsoft.VisualStudio.Web.Host.exe y MSBuild.exe Puedo encontrar.
Por lo general, después de eso, cuando reinicio mi proyecto, se cargará rápidamente. Pero no siempre.
Realmente creo que el mejor curso de acción es probablemente no compilar y depurar el código de una carpeta redirigida / recurso compartido de red.
Edición n. ° 2: dos años más tarde, y esto sigue siendo un problema para mí en Visual Studio Community 2013, pero parece que al menos encontré la tarea del culpable: Explorer.exe . Sí, quién sabía. En el momento en que termino esa tarea, bam, la página se carga en un solo segundo.
Si tengo un explorador de archivos del Explorador de Windows abierto en mi unidad de red redirigida (que es a menudo ya que ahí es donde está mi código), este problema parece ocurrir. Cerrar la ventana no es suficiente, tengo que eliminar toda la tarea de Explorer.exe. Solo pude adivinar lo que está haciendo ... volviendo loco con los manejadores de archivos?
Por lo general, puedo usar el administrador de tareas para iniciar una nueva tarea de explorer.exe (solo puedo tomar tantas alt-tabbing), y Visual Studio continuará cargando bien y rápido. Pero si vuelvo a abrir el Explorador de Windows, casi siempre vuelve a super-slow-mo.
Entonces, si tienes un recurso compartido de red redirigido, dale una oportunidad. Seguro que late trabajando localmente.
Después de pasar todo el día esperando que los símbolos se carguen tan lentamente como la velocidad de la tortuga, mezcle y cambie entre todas las combinaciones posibles: Just My Code, símbolos de caché , Intellitrace , Just-In-Time, procesos de eliminación , etc.
Mi solución fue en realidad desactivar el antivirus . Sí, Windows Defender estaba ralentizando el lanzamiento de mi proyecto. Comprobaría todos los archivos DLL como Visual Studio los solicitó y ralentizó todo el proceso de carga de símbolos.
Tengo que decir que nuestras máquinas tienen excelentes especificaciones para compilar la solución realmente rápido, por lo que nunca fue un problema. Codificamos en VS 2013 Ultimate.
Eliminé la carpeta "Archivos temporales de ASP.NET" y la carga de mi página localhost mejoró dramáticamente. Aquí está la ruta ...% temp% / Archivos temporales de ASP.NET /
En Visual Studio:
Herramientas -> Opciones -> Depuración -> Símbolos
Elija "Sólo los módulos especificados". Haga clic en el enlace "especificar módulos" y agregue un módulo en blanco (haga clic en el nuevo botón de documento y presione Aceptar).
En mi caso fue
Tools/Options/Debugging/General/Enable JavaScript debugging for ASP.NET (Chrome and IE)
Una vez que desmarque esto, mi inicio de depuración pasó de 45-60 segundos a 0-5 segundos.
En mi caso, fue la extensión de .NET Reflector Visual Studio (versión 8.3.0.93) con VS 2012. La depuración tardó 10 segundos en cada Paso sobre (F10).
En Visual Studio, vaya a Herramientas / Extensiones y actualizaciones ... y desactive .NET Reflector Visual Studio Extension . No te olvides de reiniciar Visual Studio.
En mi caso, noté que deshabilitar mi conexión a Internet lo haría funcionar tan rápido como con ctrl-f5, así que fui a depurar-> opciones-> símbolos y simplemente desmarque todas las ubicaciones .pdb.
Parece que VS intentaba conectarse a estos servidores cada vez que se iniciaba una sesión de depuración.
Tenga en cuenta que deshabilitar Depuración-> Opciones-> Depuración-> General "Habilitar soporte de origen" o "Requerir que los archivos de origen coincidan exactamente con la versión original" no haría ninguna diferencia.
Experimenté el mismo problema y probé la mayoría de las resoluciones anteriores. Simplemente eliminar la caché y los archivos temporales terminan funcionando para mí.
Intenta eliminar el contenido de estas dos carpetas:
C:/Users//{UserName}/AppData/Local/Microsoft/WebsiteCache
y
C:/Users//{UserName}/AppData/Local/Temp
(en particular, las carpetas iisexpress y Archivos temporales de ASP.NET).
Esto se puede configurar para que ocurra automáticamente al iniciar sesión en Windows agregando un archivo cmd a la carpeta C:/Users//{username}/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup
con el siguiente contenido:
rmdir C:/Users//{username}/AppData/Local/Microsoft/WebsiteCache /s /q
rmdir C:/Users//{username}/AppData/Local/Temp /s /q
Las anteriores son todas buenas soluciones y las probé todas, pero obtuve la solución here , que es
Debug -> Delete All Breakpoints
Mi problema de VS lento se resolvió deshabilitando el enlace del navegador
Nada de esto funcionó para mí, pero encontré un punto de interrupción en un símbolo que se eliminó. Parece que 2010 estaba colgando en él. Para ver si este es su problema, haga debug-> windows-> breakpoints. Si hay alguno, simplemente bórrelos.
Saunders, mencionó que verificó eso, pero no se mencionó en las soluciones para este problema. Tal vez el conocimiento común para algunos, pero no todos nosotros.
No sé si todavía tiene este problema, pero depuro los sitios en Visual Studio al adjuntar el depurador al proceso en lugar de dejar que VS lo haga por mí y lo he encontrado para mejorar enormemente los tiempos. Uso una extensión para VS llamada AttachTo y tengo un pequeño artículo sobre cómo lo uso here .
Espero que esto ayude.
Para mí fue el IE 9.08.8112.16241. Tan pronto como utilicé Firefox o Chrome, no hubo ninguna depuración lenta con F10 o F11. No sé cuál es el problema con IE, pero oficialmente desprecio usarlo para las pruebas ahora.
Actualización: he desactivado todos los complementos del programa IE y ha vuelto a la velocidad máxima. Al encenderlos uno por uno, se reveló que LastPass (en mi caso) fue el culpable. Supongo que no puedo culpar a la EM después de todo.
Para mí, implementé esta sugerencia que básicamente mejoró drásticamente el rendimiento al agregar los siguientes dos atributos a la etiqueta de compilación en web.config
<compilation ... batch="false" optimizeCompilations="true"> ... </compilation>
¿Qué hace batch = "false"?
Hace que la precompilación sea más selectiva al compilar solo las páginas que han cambiado y requieren volver a compilar
¿Qué es exactamente lo que hacen las compilaciones optimizadas? Source
ASP.NET utiliza un código hash por aplicación que incluye el estado de varias cosas, incluida la carpeta bin y App_Code, y global.asax. Cada vez que se inicia un dominio de aplicación ASP.NET, comprueba si este código hash ha cambiado con respecto a lo que se había calculado previamente. Si es así, entonces se borra toda la carpeta codegen (donde se encuentran los ensamblados compilados y copiados en vivo).
Cuando esta optimización está activada (a través de OptimizeCompilations = "true"), el hash ya no tiene en cuenta bin, App_Code y global.asax. Como resultado, si esos cambios no eliminamos la carpeta de código.
Referencia: Elemento de compilación en msdn.
Problema similar malgastado mejor la mitad de mi día!
Ya que la solución para mi problema fue diferente de lo que se dice aquí, lo publicaré para que pueda ayudar a alguien más.
El mío fue un punto de quiebre. Tuve un punto de interrupción de " Interrupción en la función" (es decir, en lugar de presionar F9 en una línea de código, los creamos usando la ventana de puntos de interrupción) que se supone que se detiene en una función de biblioteca fuera de mi proyecto.
Y tuve "Usar Intellisense para verificar el nombre de la función " COMPROBADO. (Información here ).
Esto se desaceleró en comparación con el infierno (inicio del proyecto de 2 segundos a 5 minutos).
Eliminando el punto de quiebre se solucionó para siempre.
Si alguien nota que este comportamiento sale del campo izquierdo, verifique que no haya puntos de interrupción establecidos en web.config. Debo haber configurado uno con un clic de mouse, y realmente ralentizó todas las operaciones de depuración.
También hay complicaciones en las vistas parciales donde hay un error en la página que no se reconoce de inmediato. Como Model.SomeValue en lugar de Model.ThisValue. Podría no subrayar y causar problemas en la depuración. Esto puede ser un verdadero dolor para atrapar.
También me enfrentaba a este problema, a continuación se muestran los pasos que realizo y siempre me funciona:
- Eliminando el archivo .suo de la solución.
- Eliminar los archivos temporales de ASP.NET (puede encontrarlo en encontrarlo en % WINDOW% / Microsoft.NET / Framework // archivos temporales de ASP.NET )
- Eliminar todos los puntos de interrupción en la aplicación.
También tuve problemas de ejecución con la depuración y probé muchas opciones de depurador. En mi caso, gran rendimiento logrado cuando cambio estas opciones:
Herramientas - Opciones - Depuración - Ventana de salida - (Configuración general de salida - Todos los resultados de depuración) - Desactivado
Tuve problemas con la depuración lenta de Visual Studio cuando el depurador "Código nativo" estaba habilitado. Intenta desactivarlo.
En "Visual Studio 2012" vaya a:
- Propiedades del proyecto ->
- Web ->
- Depuradores (parte inferior de la página). ->
- Deshabilitar todos excepto ASP.NET
Espero eso ayude.
Una cosa que me funcionó después de hacer todo lo anterior fue:
En la ventana Subprocesos (Depurar-> Windows-> Subprocesos), establezca Agrupar en Ninguno. Esto solo se puede hacer durante la depuración.
Esto estaba teniendo un impacto incluso después de cerrar esa ventana.
Una solución rápida y fácil para aquellos que no tienen mucha desviación de la configuración de VS predeterminada.
Herramientas -> Importar y exportar configuraciones -> Sí, guardar mi configuración actual -> Visual C #
Estoy seguro de que la solución anterior también funcionaría con otras configuraciones predeterminadas. En mi caso, algo se arruinó con mi configuración de carga de símbolos, pero no pude arreglarlo aunque probé algunas de las soluciones sugeridas.
Una vez, después de un corte de energía, tuve que enfrentar el mismo problema de lentitud cada vez que se alcanzaba un punto de ruptura o se lanzaba una Excepción.
Tuve el vago recuerdo de que el archivo "suo" (en el mismo directorio que el archivo de solución "sln") se puede corromper y hacer que todo se ralentice.
Eliminé mis archivos "suo" y todo estaba bien. La eliminación de archivos .suo es inofensiva y solo implica volver a crear el diseño de Windows más el proyecto inicial y algunas otras personalizaciones no críticas.
Vaciar el caché de símbolos funcionó para mí.
Consulte: barra de menús / Herramientas / Opciones / Depuración / Símbolos / Vaciar caché de símbolos
Vaya a sus variables de entorno y busque la clave _NT_SYMBOL_PATH.
Bórralo.
Voila, trabajó como un encanto.
El problema para mí fue la característica "Enlace del navegador" que es muy pesada cuando tienes varias pestañas abiertas para el mismo proyecto.
Porque cada vez que iniciamos el proyecto, se abre una nueva pestaña con las comunicaciones del enlace del navegador.
¡Solo cierre todas las pestañas asociadas con el proyecto y mantenga solo una abierta!
¡Este estudio visual instantáneo gratis! Es magia ! ;-)
“Browser Link es una función desde Visual Studio 2013 que crea un canal de comunicación entre el entorno de desarrollo y uno o más navegadores web. Puede utilizar el enlace del navegador para actualizar su aplicación web en varios navegadores a la vez, lo que es útil para las pruebas en varios navegadores ".