如果加载到多个应用程序域中,我的程序集是否会多次抖动

本文关键字:是否 程序集 我的 抖动 加载 应用程序域 如果 | 更新日期: 2023-09-27 18:31:41

我的程序集加载到多个应用程序域中。我的装配是否每个过程执行一次?还是每个应用程序域一次?

还是完全复杂?

如果加载到多个应用程序域中,我的程序集是否会多次抖动

它很复杂。这篇 msdn 文章说

如果程序集作为域中性加载,则意味着可以在另一个 AppDomain 中重用其代码。如果程序集作为域绑定加载到多个 AppDomain 中(这是默认值),则每个 AppDomain 都会获取自己的代码副本。这有几个糟糕的性能特征。首先是CPU成本。如果程序集有本机映像,则只有第一个 AppDomain 可以使用本机映像。所有其他应用程序域都必须对代码进行 JIT 编译,这可能会导致大量的 CPU 成本。

接下来,JIT 编译的代码驻留在专用内存中,因此无法与其他进程或应用程序域共享。如果程序集确实具有 NGEN 映像,则第一个 AppDomain 使用该映像。所有其他应用程序域都必须对代码进行 JIT 编译,这意味着还会加载该程序集的 MSIL DLL。从冷启动的角度来看,这是最糟糕的情况,因为对该程序集的磁盘访问将加倍。

将程序集加载为域中性可确保本机映像(如果存在)在应用程序中创建的所有 AppDomain 中使用。如果本机映像不存在,则以域中性身份加载程序集仍然有好处,因为代码只需编译一次,然后由应用程序中的所有 AppDomain 共享。

相关文章: