【发布时间】:2010-12-21 21:05:07
【问题描述】:
这里是 NGEN + AppDomain 问题。
我正在进行一些应用程序更改,这些更改围绕着正确加载本机图像以防止在我们的 .net 应用程序中出现糟糕的 JIT 时间。有些部分很简单,但任何必须在 appdomains 中加载的程序集(我们的应用程序必须出于各种原因使用)只会在第一次加载它们的本机映像,然后在后续加载时(现在是一个新的 appdomain)图像被拒绝并发生 JIT。
我对域中性加载了如指掌,并且已经在一些有意义的程序集中使用了它,但是进行域中性加载抵消了首先使用 appdomains 的主要原因之一我们——因为永远无法卸载域中性图像。
简而言之,我需要一种方法来加载本地图像和卸载程序集。我曾希望,只要我在尝试再次加载本机映像之前卸载第一次使用的本机映像,就不会适用正常限制,但这会导致拒绝,就像尝试同时加载本机映像一样。
This MSDN article 包含以下引用:
另一种跌倒的方法 回到JIT编译就是加载 本机图像的不同副本 到加载的每个 AppDomain 对应的组件为 特定领域。然而,这 方法将需要每个副本 NGen 图像,除了第一个, 加载到不同的地址 从它的首选基地址。因此 NGen 映像的所有这些副本 需要修复他们的地址。
这对我的需求来说是完美的,但那篇文章是我见过的唯一提到它的地方,我不确定它会如何实现。
提前感谢您提供任何见解,并感谢您的关注。
【问题讨论】:
-
would require 的时态很麻烦。它读起来像“如果我们允许这样做,那么我们必须修复所有地址。这是非常低效的,所以我们不支持”。就此致电 MSFT。
标签: .net performance appdomain ngen