Pergunta

Eu estou tentando executar alguma lógica em vários AppDomains em paralelo. Eu estou fazendo isso porque eu estou trabalhando com código legado que é "un-mutável" e eu quero melhorar o desempenho paralelização algumas coisas. O problema é que se eu executar várias instâncias dentro de um AppDomain todos eles contam com algumas estruturas de dados estáticos e interferem uns com os outros.

Meu implementação é simples. Eu quero executar várias instâncias da minha classe "ExecutionHarness" - cada um em seu próprio AppDomain - então eu criei uma classe "ExecutionHarnessProxy: MarshalByRefObject", que eu instanciar em cada um dos meus AppDomains (desde ExecutionHarness não herda de MarshalByRefObject). Então eu apenas passar o parâmetro "ExecutionData [] de dados" para o método "ExecutionHarnessProxy.Execute ()". Esse cara, em seguida, chama de "ExecutionHarness.Execute ()" e tudo é bom.

O meu problema agora é que sempre que eu passar a minha matriz de dados para a classe proxy, ele leva uma eternidade. A classe ExecutionData tem o atributo [Serializable], e funcionalmente tudo funciona, mas eu queria saber se existe alguma maneira de acelerar o processo.

  1. Poderia ser mais rápido se eu fiz o serialize / me desserializar, em ambos os lados da fronteira AppDomain?
  2. É todo esse tempo gasto para fazer a serialização? ou é apenas a transferência dos dados serializados entre AppDomains?
Foi útil?

Solução

É difícil saber sem mais informações, mas pelo que você está descrevendo, eu suspeito que a matriz ExecutionData é o culpado.

Cada vez que você chamar um método que requer esses dados, você irá seriar os dados para o AppDomain, e potencialmente de volta para fora também. Se essa matriz é grande, que pode comer um pouco de tempo de processamento.

Seria melhor se os dados podem ser carregados diretamente em cada AppDomain, e só passar os resultados da execução de volta em seu AppDomain principal. Se você pode evitar passar matrizes de dados entre os AppDomains, você provavelmente irá acelerar drasticamente o processo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top