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 IEvaluatorS 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

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