2010-01-05 3 views
2

Я пытаюсь выполнить некоторую логику на нескольких AppDomains параллельно. Я делаю это, потому что я работаю с устаревшим кодом, который является «un-changeable», и я хочу улучшить производительность, распараллеливая некоторые вещи. Проблема в том, что если я запускаю несколько экземпляров в 1 AppDomain, все они полагаются на некоторые статические структуры данных и мешают друг другу.Ускоренная перекрестная связь AppDomain

Моя реализация проста. Я хочу запускать несколько экземпляров моего класса «ExecutionHarness» - каждый в своем собственном AppDomain - поэтому я создал класс «ExecutionHarnessProxy: MarshalByRefObject», который я создаю в каждом из своих AppDomains (поскольку ExecutionHarness не наследуется от MarshalByRefObject). Затем я просто передаю параметр «ExecutionData [] data» в метод «ExecutionHarnessProxy.Execute()». Затем этот парень называет «ExecutionHarness.Execute()», и все хорошо.

Моя проблема в том, что всякий раз, когда я передаю свой массив данных классу прокси, он принимает FOREVER. Класс ExecutionData имеет атрибут [Serializable], и ​​функционально все это работает, но мне было интересно, есть ли способ ускорить это.

  1. Могло ли это быть быстрее, если бы я сериализовал/десериализовал себя по обе стороны границы AppDomain?
  2. Все это время потрачено на сериализацию? или это просто передача сериализованных данных между AppDomains?

ответ

4

Трудно узнать без дополнительной информации, но из того, что вы описываете, я подозреваю, что массив ExecutionData является виновником.

Каждый раз, когда вы вызываете метод, который требует этих данных, вы будете сериализовать данные в AppDomain и, возможно, также отступить. Если этот массив большой, это может съесть довольно много времени обработки.

Было бы лучше, если бы данные могли быть загружены непосредственно в каждом AppDomain и только передать результаты выполнения обратно в ваш основной AppDomain. Если вы можете избежать передачи массивов данных между AppDomains, вы, вероятно, значительно ускорите процесс.

Смежные вопросы