我试图在多个AppDomain上并行执行某些逻辑。我这样做是因为我正在使用“不可更改”的遗留代码,我想通过并行化一些东西来提高性能。问题是如果我在1个AppDomain中运行多个实例,它们都依赖于一些静态数据结构并相互干扰。
我的实施很简单。我想运行我的“ExecutionHarness”类的多个实例 - 每个都在它们自己的AppDomain中 - 所以我创建了一个类“ExecutionHarnessProxy:MarshalByRefObject”,我在每个AppDomain中实例化(因为ExecutionHarness不从MarshalByRefObject继承)。然后我只是将“ExecutionData [] data”参数传递给“ExecutionHarnessProxy.Execute()”方法。然后这个人调用“ExecutionHarness.Execute()”,一切都很好。
我现在的问题是,无论何时将数据数组传递给代理类,都需要FOREVER。 ExecutionData类具有[Serializable]属性,功能上它都可以工作,但我想知道是否有任何方法可以加快速度。
答案 0 :(得分:4)
没有更多信息很难知道,但是从你所描述的内容来看,我怀疑ExecutionData
数组是罪魁祸首。
每次调用需要此数据的方法时,都会将数据序列化到AppDomain中,并且可能也会退出。如果这个数组很大,那可能会耗费相当多的处理时间。
如果可以直接在每个AppDomain中加载数据,并且只将执行结果传递回主AppDomain,那会更好。如果您可以避免在AppDomains之间传递数据数组,那么您可能会大大加快这一过程。