Вопрос

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

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

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

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

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top