2012-09-28 21 views
7

¿Cuál es la diferencia entre ParallelEnumerable.Range y Enumerable.Range(...).AsParallel()?ParallelEnumerable.Range vs Enumerable.Range.AsParallel?

ParallelEnumerable.Range crea partición gama (mejor para las operaciones donde el tiempo de CPU es igual elemento foreach)

donde como Enumerable.Range(...).AsParallel() podría ser ejecuta como range o chunk

¿Hay alguna diferencia de rendimiento? ¿Cuándo debería usar cuál?

Respuesta

10

Si está realizando una operación donde la presión de la CPU aumenta a medida que se repite, querrá usar AsParallel porque puede realizar ajustes a medida que se repite. Sin embargo, si es algo que solo necesita ejecutar en paralelo y la operación no crea más presión mientras itera, entonces use ParallelEnumerable.Range porque puede dividir el trabajo de inmediato.

Referencia this article para una explicación más detallada.

Supongamos, por tanto, que está realizando algunos cálculos matemáticos complejos en cada iteración y, a medida que crecen los valores de entrada, la matemática tarda más, querrá usar AsParallel para poder realizar ajustes. Pero si usa esa misma opción con algo así como establecer una configuración de registro, verá una disminución en el rendimiento porque no hay una sobrecarga asociada con AsParallel que no sea necesaria.

Cuestiones relacionadas