NGEN + AppDomain问题。
我正在进行一些应用程序更改,这些更改主要是为了正确加载本机映像,以防止在我们的.net应用程序中出现糟糕的JIT时间。有些部分很简单,但是任何必须在appdomains中加载的程序集(我们的应用程序由于各种原因必须使用它们)才会在第一次加载其原生图像时,以及后续加载(现在是一个新的appdomain)图像被拒绝并发生JIT。
我知道关于域中立加载的所有内容,并且已经将它用于我们的一些有意义的程序集,但是进行域中立加载取消了首先使用appdomains的一个主要原因我们 - 因为域中性图像永远无法卸载。
简洁地说,我需要一种方法来加载和装配本机图像。我希望只要我在尝试再次加载之前卸载本机映像的第一次使用时,正常限制就不适用,但这会导致拒绝,就像尝试同时加载本机映像一样。
This MSDN article包含以下引用:
另一种堕落方法 回到JIT编译就是加载 本机图像的不同副本 进入加载的每个AppDomain 相应的组装为 特定域。但是,这个 方法需要每个副本 NGen图像,除了第一个, 要加载到不同的地址 从其首选的基地址。从而 所有这些NGen图像的副本 需要修复他们的地址。
这对我的需求来说是完美的,但那篇文章是我见过的唯一一篇文章,我不确定它是如何实现的。
提前感谢您的任何见解,并感谢您的光临。
答案 0 :(得分:3)
我曾希望只要我在尝试再次加载之前卸载本机映像的第一次使用时,就不会应用正常限制,但这会导致拒绝,就像尝试同时加载本机映像一样。
这样可行,但您必须等待实际卸载本机映像。当AppDomain.Unload返回时,appdomain未完全卸载。只有在下一个完整的GC之后,appdomain才会完全卸载(以及本机映像)。
此MSDN文章包含以下引用:
Surupa正在推测CLR中可能的替代实施,但目前尚未实施。
由于 拉克山费尔南多 CLR团队