WPF: AllowTransparency=True, Performance=False

Siguiendo un poco la línea de artículos sobre rendimiento en WPF, hablaremos de la implicación de rendimiento que aporta el uso de la propiedad AllowTransparency de WPF.

Esta propiedad nos permite crear ventanas transparentes, tanto en su totalidad, como habilitar regiones que no se dibujen en la misma y crear ventanas con formas irregulares.

Esta capacidad, no lo voy a negar, es muy llamativa para el diseño de interfaces que enfatizen el diseño de nuestra aplicación. Pero esta práctica no es del todo recomendable por los problemas de rendimento que conlleva.

Mientras la propiedad AllowTransparency esté asignada a False, no obtenemos problemas de rendiemiento derivados de la manera que tiene WPF de renderizar nuestra aplicación, este renderizado se lleva a cabo por el Pipeline de DirectX, por lo que en Windows XP se dibujará directamente en pantalla y en Windows Vista lo hará en una superficie compartida en el Desktop Window Manager.

Este gráfico refleja este proceso:guno

 

En cambio, si asignamos el valor de esta propiedad a True, nos encontraremos con un problema de rendimento en el Renderizado que deberemos tener en cuenta a la hora de llevar a cabo el diseño de nuestra aplicación.

 Para explicar un poco mejor esto, debemos entender el proceso que es llevado a cabo en cada sistema operativo. En Windows XP la superficie de dibujo de Direct3D falla con canales Alpha, ya que la implementación de este proceso en Windows XP difiere con el de Windows Vista y esto fuerza al sistema a usar el renderizado software. En cambio en Windows Vista el motivo cambia, ya que al llamar a IDirect3DSurface::GetDC() sí se lleva a cabo correctamente mediante hardware, pero al hacer uso de GDI, que en Windows Vista está emulado por software, obliga a que todo este proceso se dibuje en la memoria principal del sistema, lo que transforma esto en un proceso extremadamente lento.

Acompaño un gráfico que ilustra lo anterior:

gdos

Como conclusión, el uso de esta característica de WPF debe reservarse a casos muy concretos en el que el rendimento general de la aplicación no se vea gravemente afectado, y por lo tanto afecte a la Experiencia de Usuario de nuestra aplicación.

WPF: Rendimiento vs BitmapEffects

Si llevais algún tiempo experimentando con Windows Presentation Foundation, habréis descubierto los BitmapEffects, que no son más que efectos prediseñados que podemos aplicar a los elementos de nuestra interfaz para mejorar el aspecto visual de nuestras aplicaciones.


Pero no todo son buenas noticias, como todo en el desarrollo software, los BitmapEffects tienen una implicación en el uso abusibo dentro de la interfaz, y esta implicación es de rendimiento.


Los BitmapEffects producen un decrecimento en el rendimiento general de nuestra aplicación cuando no se controla su uso, ya que estos fuerzan el renderizado software de los controles que hacen uso de ellos y de todos los elemntos que estén contenidos en su jerarquía de objetos.


El procesado de pixeles para los BitmapEffects ha sido llevado a cabo en código no gestionado y para unirlo al resto de características de .NET 3.0 se hace uso de un pequeño Wrapper. Podéis ver algo más de este tema en este enlace así com descubrir cómo realizar nuestros propios BitmapEffects.


sshot-4


Otra de las implicaciones a tener en cuenta en los BitmapEffects es que no pueden usarse en una aplicación que se ejecute sobre confiabilidad parcial (Partial Trust), por lo que no podremos hacer uso de ellos en nuestras aplicaciones XBAP.


El equipo de producto está buscando introducir cambios en la siguiente versión de WPF para que se pueda hacer uso de BitmapEffects y de la aceleración Hardware desde una aplicación ejecutada en confiabilidad parcial. Estas dos opciones han sido de las más demandadas por la comunidad.

WPF: Windows Client VS XBAP

Cuando desarrollemos aplicaciones con WPF deberemos tener en cuenta cual será el despliegue que usará, por lo que deberemos decidir entre un despliegue Web mediante XBAP o crear una aplicación de escritorio, y por lo tanto tener en cuenta cuales son los requisitos que debe cumplir, ya que aunque casi toda la funcionalidad de WPF está presente en las aplicaciones XBAP, no toda ella está descrita.

Estas implicaciones deben tenerse en cuenta en la fase de definición de la aplicación, en la que deberemos decidir dicho despliegue y aquellos elementos de los que podremos hacer uso.

Para poder tener una noción clara de cuales son estas diferencias, aquí os dejo una comparativa entre aplicaciones de escritorio y aplicaciones XBAP:

  • Aplicaciones de escritorio
    • Se instala en la máquina local
    • Aparece en el menú Inicio y en Añadir/Quitar programas
    • Se instala con un MSI o con ClickOnce
    • Code Access Security
      • Se ejecuta en confiabilidad total (Full Trust)
      • Capacidades inherentes:
        • Puede mostrar ventanas hijas
        • Uso de WCF
        • Acceso al registro
        • Acceso a Escitura y lectura en el sistema de ficheros
        • Otras tareas heredadas de Full Trust…
      • Se ejecuta en una ventana independiente
      • Versiones actualizadas de la aplicación a elección del ususario
        • Automatizado por ClickOnce
        • A elecciónd el usuario
    • Uso desconectado de la Aplicación
  • Aplicaciones XBAP
    • No se instala en la máquina local
    • No aparece en el menú Inicio y en Añadir/Quitar programas
    • Se despliega automáticamente con ClickOnce
      • xxxx.xbap es en realidad un manifiesto de ClickOnce
    • Code Access Security
      • Se ejecuta en la Zona Internet
      • Excepciones de seguridad en accesos a recursos no autorizados
      • Capacidades inherentes a la zona de seguridad
        • Almacenamiento protegido
        • No se puede llamar a servicios WCF 
        • Solo se puede hacer uso de tareas disponibles en la Zona Internet
    • Seguridad adicional 
      • WPF elimina los privilegios de los drivers de dispositivo en el proceso del explorador
    • Alojado en el proceso del explorador de internet
    • Solo disponible para Internet Explorer en entornos Windows
    • Restricciones de WPF
      • No se soporta el objeto Window, se hace uso de Page
      • No se admiten ventanas modales
      • No hay soporte para BitmapEffects
      • No hay soporte para aceleración gráfica por Hardware
    • Siempre se ejecuta la última versión
    • Escenario de uso conectado
    • El usuario debe tener acceso al servidor de despliegue

WPF: Performance Tools Avaliable as Standalone MSI

Una gran noticia para todos es que las herramientas de medición y análisis de rendimiento de WPF están disponibles en un instalador independiente, por lo que ya no es necesario instalar el SDK completo para poder tener acceso a estas herramientas tan útiles y en mi opinión imprescindibles.

Además a esta gran noticia se une el hecho de que esta versión es una versión actualizada, correspondiente a la versión incluida en el SDK de .NET 3.5.

Podéis descargarlas desde estos enlaces:

X86
X64

Happy Coding!!!

Si quieres permisos… manifiestate!!

Ayer publicaba Rodrigo Corral en su blog, «Si quieres Full Trust… dímelo!!», cómo podíamos requerir al usuario que ejecute un assembly con un determinado nivel de permisos.


Me gustaría añadir otro modo alternativo a los ya comentados por él, basado en el manifest del assembly, que notifica al UAC (User Account Control de Windows Vista) cual es el nivel de permisos que necesita la aplicación para ejecutarse.


Para hacer esto solo tenemos que ir al archivo .exe.manifest de nuestra aplicación y añadir lo siguiente:


<?xml version=»1.0″ encoding=»UTF-8″ standalone=»yes»?>
<assembly xmlns=»urn:schemas-microsoft-com:asm.v1″ manifestVersion=»1.0″>
  <assemblyIdentity version=»1.0.0.0″ processorArchitecture=»X86″ name=»Microsoft.VisualStudio.Shell» type=»win32″></assemblyIdentity>
  <description>Microsoft VisualStudio.NET</description>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type=»win32″ name=»Microsoft.VC80.CRT» version=»8.0.50608.0″ processorArchitecture=»x86″ publicKeyToken=»1fc8a5a9a1e18e3b»></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type=»win32″ name=»Microsoft.Windows.Common-Controls» version=»6.0.0.0″ processorArchitecture=»X86″ publicKeyToken=»6542c64144ccf1df» language=»*»></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type=»win32″ name=»Microsoft.VC80.ATL» version=»8.0.50608.0″ processorArchitecture=»x86″ publicKeyToken=»1fc8b1a7b1e18e3b»></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns=»urn:schemas-microsoft-com:asm.v3″>
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level=»requireAdministrator»>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Donde el atributo level de la etiqueta requestedExecutionLevel puede tomar los valores:


  • requireAdministrator
  • highestAvaliable
  • asInvoker

Esto hará que se muestre un mensaje en pantalla como este en el caso de no cumplir con las condiciones de seguridad requeridas:


sshot-6

WPF: Acropolis, una primera aproximación a LoB con WPF

Microsoft code name “Acropolis” Community Technology Preview 1 es un conjunto de componentes y herramientas que persigue simplificar la construcción y la gestión de aplicaciones Cliente modulares en .NET orientadas a línea de negocio. Acropolis es parte de la línea “.NET Client Futures”, una vista previa al futuro del desarrollo Windows client.

sshot-5


Acropolis ha sido construido con las capacidades ricas de Microsoft Windows y de .NET Framework, incluyendo Windows Presentation Foundation (WPF), proporcionando herramientas y componentes prediseñados que ayudarán a los desarrolladores a ensamblar aplicaciones. Con Acropolis seremos capaces de:



  • Crear de forma sencilla experiencias de usuario con WPF para nuestras aplicaciones.
  • Construir aplicaciones cliente mediante modulos reusables y conectables que nos permitirán de forma sencilla crear aplicaciones de línea de negocio en menos tiempo.
  • Integrar y alojar nuestros módulos en aplicaciones como Microsoft Office, o construir interfaces cliente independientes.
  • Cambiar el «look and feel» de nuestra aplicación usando Temas prediseñados, o diseños personalizados usando XAML.
  • Añadir características como navegación basada en workflows y vistas especificas para el usuario con el mínimo coste de codificación.
  • Gestionar, actualizar y distribuir nuestros modulos de la aplicación de forma facil y sencilla.

 


Os dejo también un video donde se presenta Acropolis.

ReMix 07: Presentando Marca Reader

Ayer daba comienzo en el Circulo de Bellas Artes de Madrid el ReMix 07, el primer evento de este tipo en España, que se propone replicar para el público español el evento celebrado hace pocas semanas en Las Vegas.

La verdad es que debo felicitar a todos los que lo han hecho posible, ya que la propuesta ha sido llevada a cabo con gran aceptación y ha resultado tódo un éxito.

Durante la KeyNote de ayer se daban a conocer los primeros desarrollos en WPF de firma nacional, y nosotros hemos tenido el orgullo de encontrarnos entre uno de los presentados.

Se trata de Marca Reader, una aplicación WPF que busca mejorar la experiencia de los usuarios frente a una publicación electrónica, en este caso, Marca, un periódico de tirada nacional de gran alcance.

Marca ha apostado por buscar una forma de incrementar la satisfacción de sus lectores haciendo uso de lás últimas tecnologías de desarrollo de interfaces de usuario, lo que les permitirá ofrecer un valor añadido e incrementar la satisfacción de los lectores.

Desde aquí quiero darles las gracias por ayudarnos a llevar a cabo esta propuesta y por haber apostado por esta iniciativa que ayer se hizo pública y agradecerselo también a todos aquellos que han hecho posible esto.

Como supongo que aquellos que no habéis podido asistir estaréis deseando verla, aquí os dejo una pequeña captura de pantalla.

Marca Reader 

Desde aquí también quiero hacer un guiño especial a la gente de Indra y de Meta4, que han presentado sus aplicaciones con nosotros.

Felicidades, habéis demostrado que en España también se pueden hacer aplicaciones realmente espectaculares, incluso en aplicaciones de línea de negocio.

Un saludo