Búsqueda de sitios web

Comando de medida: una comparación de velocidad (Foreach vs. Foreach-Object)


Measure-Command mide cuánto tiempo tarda en completarse un comando o script. Esto es particularmente importante para procesar grandes cantidades de datos.

Medida-Comando

En este primer ejemplo, mido el comando Get-ChildItem buscando todos los archivos con el nombre de archivo Windows.

Measure-Command {Get-Childitem -Path c: -File -Recurse -ErrorAction SilentlyContinue | Where-Object Name -eq "Windows"}

Tardaron unos 44 segundos. Eso es rápido. Tengo un SSD.

La comparación

Foreach-Objeto

Ahora, midamos otro comando con Foreach-Object:

Measure-Command {0..1000000 | Foreach-Object $_}

8 segundos. Nada mal.

Para cada

Si hago lo mismo con foreach en lugar de Foreach-Object entonces tengo que aceptar que soy mucho más rápido.

$i=0
Measure-Command {foreach ($i in 0..1000000) {$i++}}

3,5 segundos. Microsoft explica por qué es como es:

https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/08/getting-to-know-foreach-and-foreach-object/

Conclusión

Foreach consume más memoria, pero es más rápido. Todos los objetos se almacenan en la memoria. Con Foreach-Object, los objetos se procesan uno tras otro y los resultados de cada objeto que pasa por la tubería se generan instantáneamente. De todos modos, mi favorito es Foreach-Object. ?

Más información: https://www.pluralsight.com/blog/tutorials/measure-powershell-scripts-speed.

Artículos relacionados