Problemi con l'estrazione di un metodo a causa del parallelismo
-
30-10-2019 - |
Domanda
Vorrei estrarre il seguente codice in un nuovo metodo:
...
Parallel.For(0, Environment.ProcessorCount, i =>
{ handTypeSum[i] = new PSTLooper(intHands).EvalEnumeration(i); });
...
PSTLooper
è di tipo IEvaluator
E ne ho molti altri IEvaluator
S vorrei testare con quel metodo. Il metodo dovrebbe essere eseguito il più velocemente possibile, per ora sono abbastanza contento delle prestazioni del parallelo. Per (mi piacerebbe conoscere metodi più veloci/migliori).
Devo generare un nuovo oggetto per ogni thread e il numero di thread corrente per il mio EvalEnumeration(int instance)
metodo. Diversi tentativi sono falliti a causa di questi vincoli.
Alcuni dei miei tentativi:
StartNewTest(new PSTLooper(intHands));
public void StartNewTest(IEvaluator)
{
Parallel.For(0, Environment.ProcessorCount, i =>
{ handTypeSum[i] = e.EvalEnumeration(i); });
}
Questo approccio si compila, ma usa solo il IEvaluator
e non ne crea uno nuovo.
StartNewTest(new PSTLooper(intHands).EvalEnumeration());
public void StartNewTest(Func<long[]> func)
{
Parallel.For(0, Environment.ProcessorCount, i =>
{ handTypeSum[i] = func.Invoke(); });
}
Ciò non si compila, poiché ho bisogno del numero di istanza.
Sono abbastanza sicuro che il mio approccio non sia il migliore, ma per ora non ne conosco meglio e quindi ho bisogno di porre questa domanda qui.
Nessuna soluzione corretta