Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果加载到多个AppDomain中,我的程序集是否会多次Jit?_C#_Appdomain_Jit - Fatal编程技术网

C# 如果加载到多个AppDomain中,我的程序集是否会多次Jit?

C# 如果加载到多个AppDomain中,我的程序集是否会多次Jit?,c#,appdomain,jit,C#,Appdomain,Jit,我的程序集已加载到多个应用程序域中。 我的装配是否在每个过程中执行一次Jit?或者是每个appdomain一次 还是更复杂的东西?它是复杂的。这个msdn说 如果程序集以非特定于域的方式加载,则意味着其代码可以在另一个AppDomain中重用。如果程序集作为域绑定(默认设置)加载到多个AppDomain中,则每个AppDomain都会获得自己的代码副本。这有几个糟糕的性能特征。首先是CPU成本。如果程序集有本机映像,则只有第一个AppDomain可以使用本机映像。所有其他AppDomain都必须

我的程序集已加载到多个应用程序域中。 我的装配是否在每个过程中执行一次Jit?或者是每个appdomain一次

还是更复杂的东西?

它是复杂的。这个msdn说

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

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

以非特定于域的方式加载程序集可确保在应用程序中创建的所有AppDomain中使用本机映像(如果存在)。如果本机映像不存在,那么将程序集作为域无关的加载仍然有好处,因为代码只编译一次,然后由应用程序中的所有AppDomain共享


谢谢-我得到了我需要的。你能给我一个简短的摘要以防链接失效吗?@dtb-我添加了一个我想要答案的比特的摘要