Accelerando comunicazione tra AppDomain
-
18-09-2019 - |
Domanda
sto provando ad eseguire una logica su più AppDomain in parallelo. Sto facendo questo perché sto lavorando con il codice legacy che è "non-mutevole" e voglio migliorare le prestazioni parallelizzazione alcune cose. Il problema è che se corro più istanze entro 1 AppDomain tutti si basano su alcune strutture di dati statici e interferiscono con la vicenda.
La mia implementazione è semplice. Voglio eseguire più istanze della mia "ExecutionHarness" class - ciascuno nel proprio AppDomain - così ho creato una classe "ExecutionHarnessProxy: MarshalByRefObject" che ho un'istanza di in ciascuno dei miei AppDomain (dal ExecutionHarness non eredita da MarshalByRefObject). Poi ho semplicemente passare il "[] Dati ExecutionData" parametro al metodo "ExecutionHarnessProxy.Execute ()". Questo ragazzo chiama poi "ExecutionHarness.Execute ()" e tutto è buono.
Il mio problema ora è che ogni volta che passo il mio array di dati per la classe proxy, ci vuole sempre. La classe ExecutionData ha l'attributo [Serializable], e funzionalmente tutto funziona, ma mi chiedevo se c'è qualche modo per accelerare l'operazione.
- Potrebbe essere più veloce se ho fatto la serializzare / deserializzare me stesso, su entrambi i lati del confine dominio di applicazione?
- è tutto questo tempo passato a fare la serializzazione? o è solo il trasferimento dei dati serializzati tra AppDomain?
Soluzione
E 'difficile sapere, senza ulteriori informazioni, ma da quello che stai descrivendo, mi piacerebbe sospetto la matrice ExecutionData
è il colpevole.
Ogni volta che si chiama un metodo che richiede questi dati, si serializzare i dati nel dominio di applicazione, e potenzialmente di nuovo fuori pure. Se questa matrice è di grandi dimensioni, che può mangiare un po 'di tempo di elaborazione.
Sarebbe meglio se i dati possono essere caricati direttamente in ogni AppDomain, e passare solo i risultati di esecuzione nel vostro dominio di applicazione principale. Se si può evitare di passare matrici di dati tra i AppDomain, è probabile che drammaticamente accelerare il processo.