外接程序性能
通过对管线协定使用非特定于域的加载,可以提高外接程序性能。 通过生成管线段的本机映像可以提高激活性能。
非特定于域的加载可提高跨域调用的性能
当外接程序加载到单独的应用程序域中时,宿主和外接程序之间的调用将由管线跨应用程序域边界进行封送。 如果包含协定的程序集是以非特定于域的方式加载的,则这些跨域调用的性能将得到显著提高。
程序集必须具有强名称,并且必须安装在全局程序集缓存中,它必须具有带 LoaderOptimization.MultiDomainHost 标志或 LoaderOptimization.MultiDomain 标志的 LoaderOptimizationAttribute。
避免使用 JIT 编译器可提高激活性能
实时 (JIT) 编译器会大大增加外接程序激活的性能开销,尤其是当在单独的应用程序域中激活外接程序时。 若要避免使用 JIT 编译器,请遵循下列准则:
对管线程序集使用强名称,并将其安装在全局程序集缓存中。
使用Ngen.exe(本机映像生成器) 创建管线程序集的本机映像。
确保包含协定的程序集以非特定于域的方式加载,如上节所述。
注意 这一点非常重要。如果不以非特定于域的方式加载协定,则外接程序端组件都不能使用本机映像。
以 MultiDomainHost 标志或 MultiDomain 标志将 LoaderOptimizationAttribute 应用于宿主程序集,可以允许跨应用程序域共享 .NET Framework 程序集的本机映像。
注意 在调试器下运行时,检测不到这种性能提高,原因是宿主进程 (vshost.exe) 未设置为可进行程序集共享。您可以禁用该宿主进程,但建议不要这样做。在调试器下运行时,不应测量性能。