2012-04-11 8 views
9

Nuestra aplicación, distribuida a través de ClickOnce, toma 10.8 segundos en promedio para iniciar. Después de ejecutar ngen en .exe (en el directorio en que ClickOnce lo instaló), se inicia en 6.4 segundos en promedio. Obviamente, esta es una gran aceleración (40%) y me gustaría utilizar ngen-ification si es posible.¿Es posible pregenerar imágenes NGen para que los clientes no tengan que hacerlo?

respuesta de Ron para Is it possible to use NGen with ClickOnce deployment? muestra cómo se puede hacer en la máquina del cliente, asumiendo que supongo que corre Windows XP, ya que quiere derechos de administrador en mi caja Windows 7, por lo que no parece ser una solución genérica

Además, ngen toma 40 segundos en mi caja para compilar todos los ensamblajes que pertenecen a esa aplicación.

Así que, idealmente, me gustaría pre-ngen nuestra aplicación para todas las (principales) arquitecturas como parte del proceso de compilación, por lo que podría enviarse al cliente sin que el usuario tenga que aceptar un "ok ejecutar como administrador? " emergente y luego espera 40 segundos.

¿Es esto posible?

+0

La salida NGen es específica de la arquitectura. Y dado que es poco probable que su máquina de compilación coincida con la (s) máquina (s) de producción, probablemente esto no funcione como espera. –

+0

@CodyGray Como mencioné en mi pregunta, estaría dispuesto a pre-ngen para todas las arquitecturas principales. Si hiciéramos x86 y amd64 solo eso debería cubrir el 95% de los clientes, supongo ... –

Respuesta

9

No se puede hacer esto sin acceso administrativo en Windows 7.

El problema no es la generación NGEN real de la imagen nativa pero la instalación en la memoria caché de imágenes nativas (C: \ Windows \ assembly \ nativeImages_v # xxxxxxxxx) que requiere permisos administrativos. Por lo tanto, incluso si encuentra una manera de pregenerar las imágenes nativas para todas las arquitecturas de destino, no podrá obtenerlas en la ubicación adecuada para que el tiempo de ejecución considere su uso.

No puede colocarlos uno al lado del otro con sus binarios habituales porque no se administrarían correctamente: se produciría un problema cuando se realizan ciertos cambios en la política de seguridad. Las actualizaciones de .net framework son los cambios aplicados u otros cambios se realizan en los ensamblados a los que se hace referencia que invalidan las imágenes nativas y requerirían la ejecución de un comando "ngen update". Microsoft simplemente no parece apoyar el caso de uso de ngen con la implementación de ClickOnce en este momento.

+0

Algo (google) me dice que tienes razón, pero esperemos un poco, tal vez algo aparezca. Después de todo, a pesar de que MS afirma lo contrario, la respuesta a http://stackoverflow.com/questions/443955 mostró que es posible, al menos para Windows XP. Por supuesto, XP no es algo en lo que dependa una aplicación implementada por ClickOnce estos días ... –

Cuestiones relacionadas