2009-06-25 14 views
6

He estado trabajando en una aplicación de WinForms que tiene aproximadamente 5 ensamblajes referenciados, escritos por nosotros, y aproximadamente 8 conjuntos de referencia de terceros (no esperamos actualizarlos en el futuro a menos que algo vaya terriblemente mal - Infragistics/DevExpress componentes!).Buenas prácticas de NGen y Gacutil

Nuestros tiempos de puesta en marcha son demasiado altos con botas frías, lo que me pregunto es si agregarlos al Gac y cambiarlos es el camino a seguir.

Cuando estamos instalando en el caché NGen, ¿tiene que estar también en el gac? ¿Cuál es la conexión entre los dos? ¿A cuál debería aspirar? Tenemos un exe, haría un ILMerge pero no estoy seguro de que funcione en nuestro escenario, una larga historia.

Además, es posible obtener la cantidad de memoria de mi exe está tomando - al igual que las aplicaciones Java hacen

+1

Es posible que desee tener una ronda de excavación con un generador de perfiles para ver primero qué está causando la lentitud. ANTS (por RedGate) es bueno. – Pondidum

Respuesta

0

me suena que su definición del problema es de alguna manera lo que implica su solución ☺

(como Netbeans!)

En otras palabras, ¿cómo sabe que el tiempo de inicio proviene de cargar los ensamblajes?

Lo que debe hacer es crear un perfil de la aplicación y asegurarse de que sea el caso. Es posible, pero ¿qué ocurre si se está iniciando algo y te estás enfocando demasiado optimizando el lugar equivocado?

Here hay algunas herramientas que deberían ayudarlo a perfilar aplicaciones no administradas.

Como estás hablando de aplicaciones Winforms, supongo que tienes Visual Studio. De ser así, puede usar its profiler para su aplicación administrada.

¡Buena suerte!

0

Si no está utilizando 3.5 SP1 del .NET Framework, debería considerar el benchmarking en esa plataforma para ver si obtiene la diferencia. Ha habido mejoras realizadas que podrían mejorar los tiempos de inicio de aplicación: CLR Optimizations In .NET Framework 3.5 SP1

This article también tiene algunas buenas pautas generales, las mejores prácticas NGEN y trucos con evitar el reajuste de sus asambleas (aunque para los conjuntos de 5 o así que se hace referencia está trabajando con, no esperes milagros).

Sin embargo, es probable que obtenga la reducción más significativa en el tiempo de inicio mediante la búsqueda de los cuellos de botella específicos en su propia aplicación en particular, en lugar de encontrar una solución rápida en otro lugar.

4

La idea principal para mejorar el tiempo de arranque es utilizar la inicialización retrasada siempre que sea posible. No instanciar cosas innecesarias inmediatamente después del inicio. Utilice el patrón lazy init. También es posible iniciar el trabajo de inicialización en segundo plano después de mostrar el formulario principal para realizar una inicialización no crítica. Etc, etc., etc.

También puede consultar el siguiente article (Improving Application Startup Time).

+1

+1 para el artículo de CLR Inside Out sobre Mejora del tiempo de inicio de la aplicación. Muy útil. (Aunque debe incluir el título del artículo en su hipervínculo, casi no lo hago). – dthrasher

Cuestiones relacionadas