Acelerar cruzada AppDomain comunicação
-
18-09-2019 - |
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.
- Poderia ser mais rápido se eu fiz o serialize / me desserializar, em ambos os lados da fronteira AppDomain?
- É todo esse tempo gasto para fazer a serialização? ou é apenas a transferência dos dados serializados entre AppDomains?
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.