Come si può immaginare l'indice del ciclo Parallel.For() passa da un valore all'altro. Come posso stimare la quantità di lavoro svolto?Aggiornamento avanzamento nei cicli Parallel.For()
Grazie.
Come si può immaginare l'indice del ciclo Parallel.For() passa da un valore all'altro. Come posso stimare la quantità di lavoro svolto?Aggiornamento avanzamento nei cicli Parallel.For()
Grazie.
Mantenendo un contatore piuttosto che guardare l'indice? Per esempio:
int counter = 0;
Parallel.For(4, 500, i => {
// TODO: something useful...
int progress = Interlocked.Increment(ref counter);
Console.WriteLine("{0}: {1}", progress, i);
});
(l'utilizzo Interlocked
è essenziale per evitare di essere da corsa condizioni su come accedere counter
)
int progress = 0;
Parallel.For(from, to, i => {
// do the job
Interlocked.Increment(ref progress);
});
ora progresso reale è (float)(to - from)/progress
E [qui] (https://gist.github.com/0xorial/8b82594e8f2b96beae77) è lo stesso wrapping. – ironic