将加载程序优化应用于进程内 COM 服务器

本文关键字:COM 服务器 进程 应用于 加载 程序 优化 | 更新日期: 2023-09-27 18:34:01

我需要在我的.NET进程内COM服务器中创建多个AppDomain(它是一个Windows资源管理器命名空间扩展)。

在我的测试控制台应用程序中,我能够在 40 秒内创建 10 个域 + WPF 窗口,这是不可接受的。添加LoaderOptimization.MultiDomainHost可将此速度提高到 2-5 秒,这没关系。

但是,COM 服务器中没有Main方法,在 AppDomainSetup 中指定 LoaderOptimization 仅影响加载 2 个或更多其他域(即第一个附加 AppDomain 在 3-4 秒内启动,其他 AppDomain 在 0.1-0.3 秒内启动)

那么,我是否可以为进程内 COM 服务器指定LoaderOptimization,如果是,如何指定?

将加载程序优化应用于进程内 COM 服务器

只要使用 C# 编写代码,就无法设置此选项。 您需要自己托管 CLR,以便配置应用程序域,这需要C++代码。 核心 MSDN 库文章集从这里开始。

试图弄清楚为什么需要这么长时间应该会产生一些结果。 这听起来当然不像是一个冷启动问题,与首次在磁盘上查找程序集的成本有关。 该性能命中仅在第一个应用程序域上相关,以后的应用程序域应该很快,因为它们会在文件系统缓存中找到程序集。

这留下了一个热启动问题,与将 IL 实时编译为机器代码有关。 解决此问题的快速方法是在程序集上运行 ngen.exe。