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.

  1. Potrebbe essere più veloce se ho fatto la serializzare / deserializzare me stesso, su entrambi i lati del confine dominio di applicazione?
  2. è tutto questo tempo passato a fare la serializzazione? o è solo il trasferimento dei dati serializzati tra AppDomain?
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top