为什么创建appdomain如此昂贵?

时间:2010-10-12 16:32:11

标签: .net performance clr

创建appdomain的确切原因是什么?它们共享相同的堆,相同的程序集等.CLR需要做什么才能提供如此多的资源呢?

我们已经看到从其他appdomain访问类型/实例需要10秒的情况(更新:两个appdomains将使用的所有必需程序集已经加载到生成新appdomain的当前appdmomain中,除了一个)。有趣的是,这只发生在第一次访问时。所有次级访问都非常快。

UPDATE2:

我们附加了VS 2010采样分析器,结果如下:

  

完成大部分个人工作的功能:   System.AddIn.Pipeline.FrameworkElementAdapters.ViewToContractAdapter(类   System.Windows.FrameworkElement)   独家样品%43,02

(是的,我们在这里使用WPF插件API)

2 个答案:

答案 0 :(得分:2)

有很多需要为appdomain初始化的管道。特别是因为它们共享相同的堆或同一组程序集。你问题中的错误细节。它们的价值仍然是 lot 比创建一个新流程要少。

看到编辑后:10秒相当多,除了appdomain对需要加载的程序集进行冷启动之外,不容易解释。磁盘或网络开销。

答案 1 :(得分:0)

这不是对问题的完整解释,而是一个有用的提示:

  1. 在没有VisualStudio主机的情况下运行应用程序(例如Ctrl + F5)。
  2. 在启动时使用[LoaderOptimization(LoaderOptimization.MultiDomainHost)]属性。
  3. 使用这些优化,可以使用以下方法:

    FrameworkElementAdapters.ViewToContractAdapter
    FrameworkElementAdapters.ContractToViewAdapter
    

    工作得更快。