如何在不指定域中立的情况下将.net本机映像(NGEN)加载到多个appdomains中?

时间:2010-12-21 21:05:07

标签: .net performance appdomain ngen

NGEN + AppDomain问题。

我正在进行一些应用程序更改,这些更改主要是为了正确加载本机映像,以防止在我们的.net应用程序中出现糟糕的JIT时间。有些部分很简单,但是任何必须在appdomains中加载的程序集(我们的应用程序由于各种原因必须使用它们)才会在第一次加载其原生图像时,以及后续加载(现在是一个新的appdomain)图像被拒绝并发生JIT。

我知道关于域中立加载的所有内容,并且已经将它用于我们的一些有意义的程序集,但是进行域中立加载取消了首先使用appdomains的一个主要原因我们 - 因为域中性图像永远无法卸载。

简洁地说,我需要一种方法来加载和装配本机图像。我希望只要我在尝试再次加载之前卸载本机映像的第一次使用时,正常限制就不适用,但这会导致拒绝,就像尝试同时加载本机映像一样。

This MSDN article包含以下引用:

  

另一种堕落方法   回到JIT编译就是加载   本机图像的不同副本   进入加载的每个AppDomain   相应的组装为   特定域。但是,这个   方法需要每个副本   NGen图像,除了第一个,   要加载到不同的地址   从其首选的基地址。从而   所有这些NGen图像的副本   需要修复他们的地址。

这对我的需求来说是完美的,但那篇文章是我见过的唯一一篇文章,我不确定它是如何实现的。

提前感谢您的任何见解,并感谢您的光临。

1 个答案:

答案 0 :(得分:3)

  
    

我曾希望只要我在尝试再次加载之前卸载本机映像的第一次使用时,就不会应用正常限制,但这会导致拒绝,就像尝试同时加载本机映像一样。

  

这样可行,但您必须等待实际卸载本机映像。当AppDomain.Unload返回时,appdomain未完全卸载。只有在下一个完整的GC之后,appdomain才会完全卸载(以及本机映像)。

  
    

此MSDN文章包含以下引用:

  

Surupa正在推测CLR中可能的替代实施,但目前尚未实施。

由于 拉克山费尔南多 CLR团队