Come posso caricare un'immagine nativa .net (NGEN) in più AppDomain senza specificare dominio neutralità?

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

Domanda

NGEN + AppDomain problema qui.

Sto lavorando su alcune modifiche alle applicazioni che ruotano attorno a rendere le immagini native caricare correttamente per evitare che il tempo JIT terribile nella nostra applicazione .net. Alcune parti erano facili, ma eventuali assemblee che devono caricare in AppDomain (che la nostra applicazione ha da utilizzare per una serie di motivi) caricheranno solo la loro immagine nativa per la prima volta, e sui carichi successivi (in quello che oggi è un nuovo dominio di applicazione) l'immagine viene rifiutata e si verifica JIT.

So tutto di carico dominio-neutral, e hanno già fatto uso di esso per alcune delle nostre assemblee in cui ha senso, ma facendo carico dominio neutro annulla una delle ragioni principali per l'utilizzo di AppDomain, in primo luogo per la noi -. come immagini neutre dominio non possono essere scaricati

Put succintamente, ho bisogno di un modo per avere immagini native di carico e scarico di assemblaggio. Avevo sperato che la restrizione normale non sarebbe applicabile fintanto che ho scaricato il primo utilizzo dell'immagine nativa prima ho cercato di caricarlo di nuovo, ma questo portato a rifiuto, proprio come se stesse cercando di caricare l'immagine nativa contemporaneamente.

In questo articolo di MSDN contiene la seguente citazione:

Un approccio alternativo alla caduta Torna alla compilazione JIT è a carico diverse copie dell'immagine nativa in ogni dominio di applicazione che carica il corrispondente assieme come domain-specific. Tuttavia, questo approccio richiederebbe ogni copia di l'immagine NGen, fatta eccezione per il primo, per essere caricato ad un indirizzo diverso dal suo indirizzo di base preferenziale. così tutte queste copie dell'immagine NGen avrebbe bisogno di loro indirizzi fissati in su.

Questo sarebbe perfetto per le mie esigenze, ma tale articolo era l'unico posto che io abbia mai visto menzionato e io sono sicuro di come sarebbe essere implementato.

Grazie in anticipo per qualsiasi comprensione, e grazie per guardare.

È stato utile?

Soluzione

Avevo sperato che la restrizione normale non sarebbe applicabile fintanto che ho scaricato il primo utilizzo dell'immagine nativa prima ho cercato di caricarlo di nuovo, ma questo portato a rifiuto, proprio come se stesse cercando di caricare l'immagine nativa contemporaneamente.

Questo funziona, ma bisogna aspettare per l'immagine originaria essere effettivamente scaricato. Quando ritorna AppDomain.Unload, il dominio di applicazione non è completamente scaricato. Il dominio di applicazione otterrà completamente scaricato (insieme alle immagini native) solo dopo la prossima GC completa.

In questo articolo di MSDN contiene la seguente citazione:

Surupa è stato speculando su una possibile implementazione alternativa nel CLR, ma questo non è attualmente implementato.

Grazie Lakshan Fernando CLR squadra

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top