外接程序性能

通过对管线协定使用非特定于域的加载,可以提高外接程序性能。 通过生成管线段的本机映像可以提高激活性能。

非特定于域的加载可提高跨域调用的性能

当外接程序加载到单独的应用程序域中时,宿主和外接程序之间的调用将由管线跨应用程序域边界进行封送。 如果包含协定的程序集是以非特定于域的方式加载的,则这些跨域调用的性能将得到显著提高。

程序集必须具有强名称,并且必须安装在全局程序集缓存中,它必须具有带 LoaderOptimization.MultiDomainHost 标志或 LoaderOptimization.MultiDomain 标志的 LoaderOptimizationAttribute

避免使用 JIT 编译器可提高激活性能

实时 (JIT) 编译器会大大增加外接程序激活的性能开销,尤其是当在单独的应用程序域中激活外接程序时。 若要避免使用 JIT 编译器,请遵循下列准则:

  • 对管线程序集使用强名称,并将其安装在全局程序集缓存中。

  • 使用Ngen.exe(本机映像生成器) 创建管线程序集的本机映像。

  • 确保包含协定的程序集以非特定于域的方式加载,如上节所述。

    注意注意

    这一点非常重要。如果不以非特定于域的方式加载协定,则外接程序端组件都不能使用本机映像。

  • MultiDomainHost 标志或 MultiDomain 标志将 LoaderOptimizationAttribute 应用于宿主程序集,可以允许跨应用程序域共享 .NET Framework 程序集的本机映像。

    注意注意

    在调试器下运行时,检测不到这种性能提高,原因是宿主进程 (vshost.exe) 未设置为可进行程序集共享。您可以禁用该宿主进程,但建议不要这样做。在调试器下运行时,不应测量性能。

请参见

参考

LoaderOptimizationAttribute

LoaderOptimization

Ngen.exe(本机映像生成器)

概念

应用程序域和程序集