¿Cómo puedo cargar una imagen nativa .NET (NGEN) en múltiples dominios de aplicación, sin especificar la neutralidad de dominio?

StackOverflow https://stackoverflow.com/questions/4503888

Pregunta

problema NGEN + dominio de aplicación aquí.

Estoy trabajando en algunos cambios en las aplicaciones que giran en torno a hacer imágenes nativas se cargan correctamente para evitar el tiempo JIT horrible en nuestra aplicación .NET. Algunas partes fueron fáciles, pero los ensamblados que tienen que cargar en dominios de aplicación (que nuestra aplicación tiene que utilizar para una variedad de razones) sólo cargar su imagen nativa primera vez, y en las cargas posteriores (en lo que ahora es un nuevo dominio de aplicación) la imagen es rechazada y se produce JIT.

Yo sé todo acerca de la carga de dominio neutral, y ya han hecho uso de ella para algunas de nuestras asambleas donde tiene sentido, pero haciendo la carga de dominio neutral anula una de las principales razones para el uso de dominios de aplicación en el primer lugar de nosotros -. como imágenes neutras dominio nunca pueden ser descargados

Dicho de manera sucinta, necesito una manera de tener imágenes nativas Conjunto de carga y descarga. Tenía la esperanza de que la restricción normal no se aplicaría siempre y cuando descargué el primer uso de la imagen nativa antes de que intentara cargar de nuevo, pero esto resultó en el rechazo al igual que si estuviera tratando de cargar la imagen nativa al mismo tiempo.

Este artículo de MSDN contiene la siguiente cita:

Un enfoque alternativo a caer de nuevo a la compilación JIT consiste en cargar diferentes copias de la imagen nativa en cada dominio de aplicación que las cargas de las montaje correspondiente como -Dominio específico. Sin embargo, esta enfoque requeriría cada copia de NGen la imagen, a excepción de la primera, para ser cargado en una dirección diferente de su dirección base preferida. Así todas estas copias de la imagen NGen necesitaría sus direcciones arreglado.

Esto sería perfecto para mis necesidades, pero ese artículo era el único lugar que jamás he visto mencionado y estoy seguro de cómo se llevaría a cabo.

Gracias de antemano por cualquier idea, y gracias por mirar.

¿Fue útil?

Solución

Yo tenía la esperanza de que la restricción normal no se aplicaría siempre y cuando descargué el primer uso de la imagen nativa antes de que intentara cargar de nuevo, pero esto resultó en el rechazo al igual que si estuviera tratando de cargar la imagen nativa al mismo tiempo.

Esto funciona, pero hay que esperar a que la imagen nativa que se descargue efectivamente. Cuando vuelve AppDomain.Unload, el dominio de aplicación no está completamente descargada. El dominio de aplicación conseguirá totalmente descargada (junto con las imágenes nativas) sólo después de que el próximo GC completa.

En este artículo de MSDN contiene la siguiente cita:

Surupa estaba especulando sobre una posible implementación alternativa en el CLR, pero esto no se lleva a cabo actualmente.

Gracias Lakshan Fernando CLR Equipo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top