0

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

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

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

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

4

1 回答 1

0

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

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

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

于 2012-05-14T13:42:15.740 回答