Logo principal de El Ave Fenix
Visita desde: - (N/A)
Omitir vínculos de navegación.

Logo de MVP

Contactar por correo

Contador gratuito
visitas desde el 22/Sep/02

Este sitio utiliza ASP.NET 3.5

Este sitio está construido y publicado con Visual Studio 2008 y Expression Web

Este sitio utiliza Microsoft Silverlight

Este sitio se ha hecho y publicado integramente con Visual Studio 2008 y Expression Web

Trucos en .NET
Última actualización: 4 de Marzo de 2008
Trucos de rendimiento para Visual Studio 2008

No hay herramienta de desarrollo que no pueda ser optimizada en rendimiento. VS 2008 no es una excepción y lo mismo es válido para el tipo de aplicaciones que se pueden construir con ella. Como todos tenemos que hacer demos en nuestras presentaciones y queremos que funcionen lo más rápidamente posible, es interesante revisar algunos de los trucos más relevantes desde dos puntos de vista: la herramienta misma, y las aplicaciones que podemos construir con ella.

Además, para que cada uno pueda indagar con más profundidad en cada tema de su interés y por razones de espacio (porque sino esto sería un libro y no un artículo de la Cueva del Desarrollo), añado recomendaciones en forma de enlaces para distintos escenarios y características de optimización.

Bajo el punto de vista de VS 2008, he dado con algunos trucos interesantes:

Acerca de las condiciones de los discos duros: Scott Guthrie sugiere algunos trucos curiosos en: " Tip/Trick: Hard Drive Speed and Visual Studio Performance" y el Jefe de la División de Desarrollo en MS-Redmond, Soma Somasegar, también añade los siguientes:

· Reconstruir un proyecto Visual Basic y ejecutar el compilador en “background” es 3 veces más rápido y utiliza un tercio de memoria menos. Más datos sobre esto aquí.

Recorrer ficheros grandes en C# con el Editor es 100% más rápido que antes, mientras que teclear texto nuevo es 50% más rápido.

El tiempo de respuesta de Intellisense con tipos grandes en C# es 10 veces más rápido que antes

La compilación incremental se realiza 90% más rápido en soluciones C++/CLI que anteriormente. Más datos sobre esto en este enlace

Los ficheros de Office Word y Excel, se procesan 20 veces más rápido en el servidor.

El proceso de comandos del control de versión de Team Foundation Server ha sido reescrito para soportar operaciones sin límite de carga en los comandos principales y sin depender de la memoria disponible en el servidor. En las pruebas, los comandos se ejecutaban del 10% al 60% más rápido, con las mejoras más notables asociadas con los proyectos más grandes. Puede leerse más acerca de las mejoras en escalabilidad del TFS aquí y aquí

También existen mejoras de rendimiento que explotan el hardware “multi-core”, por ejemplo el soporte multi-hilo añadido a MSBuild. Además, utilizando el switch /MP switch, puede mejorarse significativamente el tiempo de compilación en proyectos C++ -ellos afirman que se botienen rendimientos de mejora del 30% en la construcción de un Front-End C++ cuando se dispone de este tipo de hardware dual-core. Otras mejoras siginificativas del rendimiento afectan al runtime de NET 3.5 a la hora de gestionar los hilos de ejecución del CLR en aplicaciones multi-hilo de todas clases.

Estos cambios arquitectónicos, cuando se combinan con los cambios en las API’s de sockets, mejoran notablemente los procesos de entrada salida con sockets asíncronos, llegando hasta un 70% con un procesador dual-core disponible. Las implicaciones de estas mejoras en el rendimiento están disponibles aquí.

Por otra parte, o sea, en la optimización de aplicaciones, existen numerosas referencias de interés, dependiendo, otra vez, del tipo de aplicación que se quiere construir. Uno de los mejores sitios sobre optimización de aplicaciones que he visto es el sitio web dotnetslackers.com en su página Performance. Es una colección de enlaces, (incluyendo algunos de los mencionados más arriba) sobre muchísimos trucos y técnicas de optimización.

Trucos Generales
  • El recolector de basura no reordena los objetos en memoria : Cuando el GC decide realizar una recolección no reorganiza los objetos activos al estilo de un defragmentador de disco. Antes bien, lo que hace, es deslizar los objetos a una ubicación conjunta para liberar espacio en el segmento actual
  • El GC tiende a asignar memoria a partir del final de la -actualmente- utilizada: Los objetos del montón (heap ) administrado, son empaquetados juntos, sin espacio libre entre ellos y las ubicaciones consecutivas tienden a incrementar la dirección de memoria.
  • Como corolario a lo anterior dos "casi-reglas" (siempre hay excepciones):
    • Nunca llames a GC.Collect ()
    • No incluyas métodos Finalize() en tu código
  • Cómo saber si el usuario de la aplicación está el en grupo de administradores: Podemos utilizar el éste sencillo código:
  • if (new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
  • { Console.WriteLine("Soy Administrador"); }

    Como recuperar la configuración de IIS después de una desinstalación/reinstalación

Cuando se ha instalado .NET previamente a la instalación de IIS, las aplicaciones se niegan a ejecutar indicando un mensaje del tipo No se puede ejecutar el proyecto en modo compartido... La solución se basa en lo siguiente:

  • Desde una línea de comandos, llamar a "%windir%\Microsoft.NET\Framework\(version)\aspnet_regiis.exe" -i
  • En caso de que -además- fuese necesario el registro correcto del fichero que se encarga de los filtros ISAPI (aspnet_isapi.dll), debe de registrarse manualmente mediante:

    REGSVR32 "%windir%\Microsoft.NET\Framework\(version)\aspnet_isapi.dll"

    • Como facilitar la edición de ficheros individuales con Visual Studio .NET

    Un típico problema de las asociaciones de ficheros es cuando abrimos un fichero aislado de cualquier lenguaje y se abre todo el Visual Studio, con el tiempo que conlleva. Don Box, ha publicado un truco directamente de los creadores, consistente en modificar el registro para cada extensión que nos interese, y añadirle lo siguiente:

    Hay que cambiar la clave original:

  • [HKEY_CLASSES_ROOT\VisualStudio.csfile.7.1\shell\Open.VisualStudio.7.1\command]
    @="\" C:\\...\\devenv.exe \ " /dde

    por ésta:

    • [HKEY_CLASSES_ROOT\VisualStudio.csfile.7.1\shell\Open.VisualStudio.7.1\command] @="\" C:\\...\\devenv.exe \ " /dde \"%L\"

    En éste ejemplo está hecho para C#. Afortunadamente, las posiciones de las extensiones en el Registro ocupan una misma zona, si se editan con RegEdit.exe y resulta fácil localizarlas, a partir de la primera.

    • Ejecutar instalación silenciosa de .NET a partir del fichero dotnetfx (redistribuible)

      Para el runtime redistribuible: dotnetfx.exe /q /c:"install.exe /q"

      Para el .NET SDK completo: setup.exe /q /c:"install.exe /q"

    • Utilizar los estilos Visuales de Windows XP.

    Se basa en el uso alternativo de la librería de sistema (NO redistribuible, y por lo tanto, no utilizable en otros sistemas), CommCtrl32.DLL, versión 6.0. Por defecto, tanto .NET como otras aplicaciones utilizan la versión anterior. La forma de utilizar dichos estilos se basa en la inclusión de un fichero .manifest en el directorio del ejecutable (o incorporado al mismo ejecutable), y en algunas opciones de configuración (si los controles de esa librería disponen de una propiedad FlatStyle, hay que seleccionar System, si no la parte visual se asume automáticamente). En el sitio Web del Guille, tenéis un extenso artículo sobre cómo utilizarlo en .NET, tanto en la versión 1.0, como en la 1.1, utilizando .manifest y también sin él.

    Además de esto, el otro día descubrí que se podían utilizar los estilos visuales directamente desde el Visual Studio, o sea, viendo los estilos desde la propia ventana de diseño, si añadimos simplemente el siguiente manifiesto ( devenv.exe.manifest.zip) al directorio donde reside el IDE de Visual Studio (Devenv.exe). El efecto es inmediato, y facilita el diseño sin tener que esperar a la ejecución para ver los estilos en funcionamiento:

    PD: No obstante, hay que añadir que se han detectado comportamientos anormales bajo alguna configuración concreta (en las versiones 1.0 y 1.1, no en la 2.0) utilizando esto, especialmente al acceder a archivos de recursos.

    • 65 Trucos para la migración de Visual Basic 6.0 a Visual Basic .NET

    El siguiente documento, es una publicación que recoge algunas de las mejores sugerencias para migración.

    Trucos para Visual Studio .NET
    • Visual Studio actúa como un Editor de Recursos internos de cualquier ejecutable:

    En efecto, si arrastramos un ejecutable a la ventana del Explorador de Soluciones de Visual Studio .NET (o lo seleccionamos mediante "Añadir Referencia") y posteriormente hacemos doble clic sobre él, el IDE lo "destripa", ofreciéndonos la posibilidad de editar sus iconos, menús, tablas de recursos, e incluso su información de copyright, tal y como se ve en la figura adjunta.

    Vista del Bloc de Notas en Visual Studio 

    ¡Ah! y si seleccionamos cualquiera de estos elementos podemos sustituirlos por los equivalentes .NET que tengamos en la Caja de Herramientas..

    • Ventanas acoplables: Más que un truco es una característica del entorno, pero es importante: Acostumbrarse a manejar el entorno de ventanas acoplables nos puede dejar toneladas de espacio libre para el código fuente (gracias a las marcas Marca de Ventana Acoplable). También otro detalle se agradece: cuando hacemos doble clic en una de las ventana acoplables se presenta en su totalidad en el centro de la pantalla (útil en presentaciones y clases sobre todo), y un nuevo doble clic la devuelve a la posición en que se encontraba.

    • Llamar a un documento editable o a una página ASP.NET o HTML directamente, desde la línea de comandos: Visual Studio permite ser invocado desde la línea de comandos mediante la opción ejecutar de Menú de Inicio, pasándole como argumento una página HTML o ASP.NET. El IDE mostrará la página en edición, sin pertenecer a ningún proyecto.

      Ej: Menu Inicio/Ejecutar: devenv.exe <Path>\página.htm ó incluso devenv.exe <Fichero.exe>...

      Y cuando tenemos que hacer una presentación o clase, otra opción permite seleccionar el tamaño del Tipo de Letra desde la línea de comandos. Por ejemplo: devenv.exe /fs 14, selecciona tipo de letra de 14 puntos.

    • Abrir un ensamblado con otros editores: Examinador de Objetos, Editor Binario, etc.

      Podemos abrir un ensamblado con diferentes editores, incluso si estamos trabajando en el proyecto al que pertenece: basta con seleccionar "Ver todos los archivos" en la Ventana de Soluciones, y seleccionar el EXE/DLL com botón derecho/ Abrir con... Nos saldrá una ventana con todos los editores que el objeto admite: incluso podemos seleccionar otros objetos adicionales, como el excelente visor de clases de Lutz Roeder. La ventana es la siguiente:

      Ventana de Editores

    • El editor de código fuente es visualmente sensible a las directivas #debug y #trace

      Tampoco es un truco, sino una característica, pero está muy bien: Si usamos esas directivas, el código fuente correspondiente que no se vaya a ejecutar se pone en gris automáticamente. IntelliSense a tope...

    • El Cuadro de Herramientas como depósito de código: No sólo podemos crear nuestras propias fichas en el Cuadro de Herramientas, sino que funcionan como almacenadores de código. Si marcamos una sección de código y posteriormente la arrastramos a nuestra ficha o a la General, queda almacenado allí como elemento general de Visual Studio (para cualquier aplicación). Posteriormente, doble clic sobre la entrada (que podemos llamar como queramos) nos copiará el código fuente en el punto de inserción de código que tengamos activo (y si existe código seleccionado, lo sustituye con el del depósito).

      Todavía hay otra característica nueva: si en lugar de pegar con CTL-V lo hacemos con CTL-SHIFT-V iremos recorriendo el Anillo del Portapapeles, a través de todos los elementos copiados en secuencia...

    • CTL-S funciona en cualquiera de las ventanas de salida: output, debug, etc, permitiendo guardar todo el contenido de la ventana en un fichero de texto. ideal para salidas complejas y/o monitorización de procesos de compilación. 

    • La ventana de Asociar Procesos de Depuración, nos llevará automáticamente al depurador nativo de cada clase (CLR, T-SQL, Script, etc.) si en lugar de pulsar el botón asociar y luego seleccionar el depurador pulsamos directamente CTL+Asociar. 

    • Se puede acelerar la carga del IDE eliminado el navegador por defecto, seleccionando en la Página de Inicio, Mi Perfil, y ahí, "Perfil Personalizado", y "Mostrar entorno vacío". Si además cerramos las ventanas de la Ayuda en el Explorador de Soluciones, el IDE entra como un tiro...

    • Haciendo doble clic sobre una solapa de edición de un fichero, podemos dividir la ventana del editor en tantos grupos como queramos y mover los elementos de un grupo a otro. Similar a Word, o Excel. 

    • El fichero <Aplicacion>.config puede ser llevado automáticamente al directorio de salida del compilador cambiando su nombre por el de App.Config.

    • Existe una opción ideal para la depuración de aplicaciones Cliente/Servidor que consiste en que podemos seleccionar dentro de una solución con más de un proyecto, la opción "Establecer proyectos de Inicio" / "Proyectos de Inicio Múltiples" indicando cómo deseamos al ejecución de cada uno de ellos. Al lanzar la ejecución se lanzarán las dos aplicaciones.

    • Las combinaciones de teclas (Atajos) son siempre una gran ayuda para los nerviosos (como yo), que preferimos, a veces, la rapidez del teclado en vez de las búsquedas con el ratón. La siguiente es una buena lista de combinaciones de teclas.

      Atajos de teclado pertenecientes a Visual Studio .NET
      Funcionalidad Comando Atajo 1 Atajo 2
      Bookmark Clear All CTRL + K CTRL + L
      Bookmark Toggle Bookmark CTRL + K CTRL + K
      Bookmark Next Bookmark CTRL + K CTRL + N
      Bookmark Previous Bookmark CTRL + K CTRL + P
      Debug Autos Window CTRL + ALT + V A
      Debug Break All CTRL + ALT + Break
      Debug Breakpoints Window CTRL + ALT + B
      Debug Call Stack Window CTRL + ALT + C
      Debug Clear All Breakpoints CTRL + SHIFT + F9
      Debug Immediate Window CTRL + ALT + I
      Debug Locals Window CTRL + ALT + V L
      Debug Quick Watch CTRL + ALT + Q
      Debug Restart CTRL + SHIFT + F5
      Debug Run to Cursor CTRL + F10
      Debug Set Next Statement CTRL + SHIFT + F10
      Debug Start F5
      Debug Start without debug CTRL + F5
      Debug Toggle Breakpoint F9
      Debug Lanza el compilador CTRL + SHIFT + B
      Documents Save All CTRL + SHIFT + S
      Find IDE Combo CTRL + D
      Find Incremental CTRL + I
      Find Next Selected CTRL + F3
      Find Previous Selected CTRL + SHIFT + F3
      Layout Move (Grid) ??
      Layout Move (Pixel) CTRL + ??
      Layout Size (Grid) SHIFT + ??
      Layout Size (Pixel) CTRL + SHIFT + ??
      Outlining Collapse to Definitions CTRL + M CTRL + O
      Outlining Hide Selection CTRL+M CTRL+H
      Outlining Unhide Selection CTRL + M CTRL + U
      Outlining Toggle All CTRL + M CTRL + L
      Outlining Toggle Current CTRL + M CTRL + M
      Project Add Existing Item SHIFT + ALT + A
      Project Add New Item CTRL + SHIFT + A
      Project New Project CTRL + SHIFT + N
      Project Open Project CTRL + SHIFT + O
      Query Run CTRL + E
      Query Run Selected Text CTRL + Q
      Query Step Into ALT + F5
      Text Block Extend SHIFT + ALT + ??
      Text Comment Selection CTRL + K CTRL + C
      Text Uncomment Selection CTRL + K CTRL + U
      Text Select Current Word CTRL + W
      Text Cycle CB Ring CTRL + SHIFT + V
      Text Format Document (tabs) CTRL + K CTRL + D
      Text Format Selection (tabs) CTRL + K CTRL + F
      Text Line Cut CTRL + L
      Text Line Delete CTRL + SHIFT + L
      Text Line Insert Above CTRL + Enter
      Text Line Insert Below CTRL + SHIFT + Enter
      Text Select to last Edit point CTRL + =
      Text Toggle Word Wrap CTRL + R CTRL + R
      Text Scroll CTRL + ?
      Text Transpose Characters CTRL + T
      Text Transpose Lines SHIFT + ALT + T
      View Code F7
      View Designer SHIFT + F7
      View Full Screen SHIFT + ALT + Enter
      Windows Class View CTRL + SHIFT + C
      Windows Command Window CTRL + ALT + A
      Windows Debug - Autos CTRL + ALT + V A
      Windows Debug - Breakpoints CTRL + ALT + B
      Windows Debug - Call Stack CTRL + ALT + C
      Windows Debug - Immediate CTRL + ALT + I
      Windows Debug - Locals CTRL + ALT + V L
      Windows Locals Window CTRL + ALT + L
      Windows Object Browser CTRL + ALT + J
      Windows Properties Window F4
      Windows Server Explorer CTRL + ALT + S
      Windows Task List CTRL + ALT + K
      Windows Toolbox CTRL + ALT + X
      Novedades a Noviembre/2003
      Text Seleccióna rectángulos de código (no líneas)  ALT + DRAG  
      Text Navegación por código tipo I. Explorer CTRL + - (SHIFT + CTRL + -)

      El siguiente fichero contiene las definiciones de teclas como un complemento de Visual Studio: KeyMap. Basta con registrarlo como un servidor COM y la próxima vez que se abra Visual Studio, en la Ayuda, tendremos el complemento disponible.

      También podemos crear nuestras propias Listas de Tareas (no sólo TODO, etc) en la opción Herramientas/Opciones/Lista de Tareas, escribimos un nuevo nombre de tarea, le seleccionamos una prioridad y pulsamos Agregar.

    • La ventana de Excepciones, nos permite definir como queremos tratar la depuración de una Excepción determinada, independientemente de cómo se trate el resto. En Depurar/Excepciones, podemos seleccionar o buscar la excepción por su nombre o por parte de él y seleccionar el tratamiento adecuado:

      Ventana de Excepciones

    • La lista completa de comandos en línea que acepta Visual Studio .NET

      Puede obtenerse la lista de comandos completa que el fichero correspondiente al IDE acepta. En una ventana del DOS tecleamos:

      C:\> devenv /?

      y el resultado es el siguiente:

      Uso:
      devenv [archivosolución | archivoproyecto | cualquierarchivo.ext] [modificadores]

      Puede invocar a devenv con un primer argumento para especificar un archivo de solución o de proyecto. También puede invocar a devenv con un primer argumento que puede ser cualquier tipo de archivo que sólo desee abrir en un editor. Si proporciona un archivo de proyecto, el IDE lo abre en el contexto de una solución buscando un archivo
      .sln con el mismo nombre base que el archivo de proyecto y en el directorio primario desde el archivo de proyecto. Si dicho archivo .sln no existe, el IDE busca un único archivo .sln que haga referencia al proyecto. Si no existe ese archivo .sln único, el IDE crea una solución sin guardar con un nombre de archivo .sln predeterminado que tenga el mismo nombre base que el archivo de proyecto.

      Sintaxis de la línea de comandos:
      devenv archivosoluciones.sln /build configuraciónsolución [ /project nombreproyectooarchivo [ /projectconfig nombre ] ]

      Modificadores de la línea de comandos disponibles:

      /build genera la configuración de soluciones especificada
      /project especifica el proyecto que desea generar en vez de la solución
      debe especificar /build para usar /project
      /projectconfig especifica la configuración del proyecto que desea generar
      debe especificar /project para utilizar /projectconfig
      /out guarda los resultados de la generación en un archivo especificado
      /rebuild igual que /build pero, previamente, realiza una limpieza
      /clean limpia los resultados de la generación
      /deploy genera la configuración de soluciones especificada y, a continuación, la implementa
      /run ejecuta la configuración de soluciones especificada
      /runexit ejecuta la configuración de soluciones especificada y, a continuación, finaliza
      /command ejecuta la línea de comandos interna especificada después del inicio
      /mditabs utiliza la organización por fichas
      /mdi utiliza la interfaz MDI
      /fn utiliza el nombre de fuente especificado
      /fs utiliza el tamaño de fuente especificado
      /LCID utiliza el id. de idioma especificado
      /noVSIP deshabilita la clave de licencia de programadores de VSIP para las pruebas de VSIP
      /safemode sólo carga el entorno y servicios predeterminados para una mayor estabilidad
      /resetskippkgs permite una nueva carga de VsPackages cuando ya se han producido errores
      en la carga

      Modificadores específicos del producto:

      /debugexe Abrir el archivo ejecutable especificado que se va a depurar.
      El resto de la línea de comandos se pasa a este
      archivo ejecutable como sus argumentos.
      /useenv Utilizar las variables de entorno PATH, INCLUDE, LIBPATH y LIB
      en lugar de las rutas de acceso IDE para generaciones de VC++.

      Para asociar el depurador desde la línea de comandos, utilice:
      vs7jit.exe -p


  • Suscríbete a dotNetMania, y obtén libros gratis

    Alojamiento de calidad a precios comprensibles


    Grab this badge here!

    Realce, Diseño Web e Imagen Integral de última generación

    Proyecto solidario de ayuda a ONG's 

    Nuevo servicio en esta Web. Pulse sobre cualquier palabra para obtener una definion o datos sobre ella