加速跨AppDomain通信

时间:2010-01-05 01:10:46

标签: .net serialization appdomain marshalbyrefobject

我试图在多个AppDomain上并行执行某些逻辑。我这样做是因为我正在使用“不可更改”的遗留代码,我想通过并行化一些东西来提高性能。问题是如果我在1个AppDomain中运行多个实例,它们都依赖于一些静态数据结构并相互干扰。

我的实施很简单。我想运行我的“ExecutionHarness”类的多个实例 - 每个都在它们自己的AppDomain中 - 所以我创建了一个类“ExecutionHarnessProxy:MarshalByRefObject”,我在每个AppDomain中实例化(因为ExecutionHarness不从MarshalByRefObject继承)。然后我只是将“ExecutionData [] data”参数传递给“ExecutionHarnessProxy.Execute()”方法。然后这个人调用“ExecutionHarness.Execute()”,一切都很好。

我现在的问题是,无论何时将数据数组传递给代理类,都需要FOREVER。 ExecutionData类具有[Serializable]属性,功能上它都可以工作,但我想知道是否有任何方法可以加快速度。

  1. 如果我自己在AppDomain边界的两边进行序列化/反序列化会更快吗?
  2. 所有这些时间都花在了序列化上吗?或者只是在AppDomains之间传输序列化数据?

1 个答案:

答案 0 :(得分:4)

没有更多信息很难知道,但是从你所描述的内容来看,我怀疑ExecutionData数组是罪魁祸首。

每次调用需要此数据的方法时,都会将数据序列化到AppDomain中,并且可能也会退出。如果这个数组很大,那可能会耗费相当多的处理时间。

如果可以直接在每个AppDomain中加载数据,并且只将执行结果传递回主AppDomain,那会更好。如果您可以避免在AppDomains之间传递数据数组,那么您可能会大大加快这一过程。