创建appdomain的确切原因是什么?它们共享相同的堆,相同的程序集等.CLR需要做什么才能提供如此多的资源呢?
我们已经看到从其他appdomain访问类型/实例需要10秒的情况(更新:两个appdomains将使用的所有必需程序集已经加载到生成新appdomain的当前appdmomain中,除了一个)。有趣的是,这只发生在第一次访问时。所有次级访问都非常快。
UPDATE2:
我们附加了VS 2010采样分析器,结果如下:
完成大部分个人工作的功能: System.AddIn.Pipeline.FrameworkElementAdapters.ViewToContractAdapter(类 System.Windows.FrameworkElement) 独家样品%43,02
(是的,我们在这里使用WPF插件API)
答案 0 :(得分:2)
有很多需要为appdomain初始化的管道。特别是因为它们不共享相同的堆或同一组程序集。你问题中的错误细节。它们的价值仍然是 lot 比创建一个新流程要少。
看到编辑后:10秒相当多,除了appdomain对需要加载的程序集进行冷启动之外,不容易解释。磁盘或网络开销。
答案 1 :(得分:0)
这不是对问题的完整解释,而是一个有用的提示:
[LoaderOptimization(LoaderOptimization.MultiDomainHost)]
属性。使用这些优化,可以使用以下方法:
FrameworkElementAdapters.ViewToContractAdapter
FrameworkElementAdapters.ContractToViewAdapter
工作得更快。