Ускорение взаимодействия между доменами приложений

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

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

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

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

person skb    schedule 05.01.2010    source источник
comment
Прочтите мой блог о взаимодействии между доменами приложений blog.vcillusion. co.in/   -  person vCillusion    schedule 03.06.2018


Ответы (1)


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

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

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

person Reed Copsey    schedule 05.01.2010