Comment puis-je charger une image native .net (NGEN) dans plusieurs domaines d'application sans spécifier la neutralité de domaine?

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

Question

NGEN + problème AppDomain ici.

Je travaille sur quelques changements d'application qui gravitent autour de faire des images natives se chargent correctement pour éviter le temps terrible JIT dans notre application .net. Certaines parties étaient faciles, mais toutes les assemblées qui doivent charger dans AppDomains (que notre application doit utiliser pour diverses raisons) ne charge leur image native pour la première fois, et sur les charges suivantes (dans ce qui est maintenant une nouvelle appdomain) l'image est rejetée et JIT se produit.

Je sais tout sur le chargement de domaine neutre, et ont déjà fait usage pour certains de nos assemblées où il est logique, mais faire le chargement de domaine neutre annule l'une des principales raisons pour l'utilisation AppDomains en premier lieu pour nous -. comme domaine des images neutres ne peuvent jamais être déchargées

Succinctement, je besoin d'un moyen d'avoir des images natives chargement et déchargement assemblage. Je l'avais espéré que la restriction normale ne serait pas applicable aussi longtemps que je déchargé la première utilisation de l'image native avant d'essayer de le charger à nouveau, mais cela a entraîné le rejet comme si vous essayez de charger l'image native en même temps.

Cet article MSDN contient la citation suivante:

  

Une approche alternative à la baisse   Retour à la compilation JIT est à la charge   différentes copies de l'image native   dans tous les AppDomain qui charge les   ensemble correspondant comme   domaine spécifique. Cependant, cette   approche nécessiterait chaque copie   l'image NGen, à l'exception de la première,   à charger à une autre adresse   à partir de son adresse de base préférée. Donc   toutes ces copies de l'image NGen   aurait besoin de leurs adresses fixes vers le haut.

Ce serait parfait pour mes besoins, mais cet article était le seul endroit que j'ai jamais vu mentionné et je ne suis pas sûr comment il serait mis en œuvre.

Merci d'avance pour toute perspicacité, et merci pour la recherche.

Était-ce utile?

La solution

  
    

J'avais espéré que la restriction normale ne serait pas applicable aussi longtemps que je déchargé la première utilisation de l'image native avant d'essayer de le charger à nouveau, mais cela a entraîné le rejet comme si vous essayez de charger l'image native en même temps.

  

Cela fonctionne, mais vous devez attendre que l'image native pour être effectivement déchargé. Au retour AppDomain.Unload, le appdomain est pas complètement déchargé. Le appdomain va se décharger complètement (ainsi que des images natives) seulement après complète suivant GC.

  
    

Cet article MSDN contient la citation suivante:

  

Surupa spéculait sur une mise en œuvre alternative possible dans le CLR, mais ce n'est pas actuellement mis en œuvre.

Merci Lakshan Fernando Équipe CLR

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top