2

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

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

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

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

1 回答 1

4

没有更多信息很难知道,但是根据您的描述,我怀疑该ExecutionData数组是罪魁祸首。

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

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

于 2010-01-05T01:29:28.437 回答