Ускорение кросс-доменного взаимодействия - PullRequest
2 голосов
/ 05 января 2010

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

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

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

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

1 Ответ

4 голосов
/ 05 января 2010

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

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

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

...