Welcome to Our Website

Quick Hits: Adding Items to an Array and a Look at Performance

tuve algunos comentarios en un artículo reciente de comparación de rendimiento que fueron bien recibidos y me animaron a escribir algunos más de estos artículos similares. Así que sin más preámbulos, vamos a empezar a buscar en la adición de elementos a una matriz y que enfoque sería mejor en términos de rendimiento.

normalmente, el enfoque más común que veo al agregar elementos a una matriz en PowerShell es mediante el uso del operador+=.,

 $a = @()$a += 'data'$a$a += 'test'$a

primero tuve que inicializar la matriz, de lo contrario mis intentos de agregar el texto serían tratados como texto concatenado, que no es lo que estoy buscando en este ejemplo. Como he dicho, este es el enfoque común que veo, pero es necesariamente el enfoque más rápido? Bueno, la respuesta es no.

Usando una ArrayList

la respuesta para un mejor rendimiento está en el uso de una ArrayList. Como puede ver cada vez más con la obtención de un mejor rendimiento de PowerShell, normalmente verá un movimiento hacia el uso de algunos .,Net instances para realizar operaciones similares que se pueden realizar utilizando comandos u operadores reales de PowerShell. Por lo tanto, algo que hice anteriormente se puede hacer como lo siguiente:

 $a = New-Object System.Collections.ArrayList$a.Add('data')$a.Add('test')$a

el 0 y el 1 que ves que se generan cada vez que agrego un elemento indica el índice del cual se agregó el elemento a la colección. Por lo tanto,’ data ‘se agregó en el índice 0 y’ test ‘ se agregó al índice 1. Esto puede ser bastante molesto en mi opinión y puede contaminar la tubería y traer resultados indeseables. Puede evitar esto asegurándose de que los datos se envíen a una ubicación nula.,

tenemos dos opciones para crear una colección de elementos configurados ante nosotros, pero la siguiente pregunta es ¿cuál es la más rápida? ¡Averigüémoslo!

No estoy diciendo que ArrayList ganó cada vez wait espera, estoy diciendo eso! A medida que el número total de artículos añadidos a cada colección aumentó, el tiempo también aumentó para cada uno de los enfoques con el += aumentando bastante dramáticamente cerca del final. Lo que está sucediendo con el operador += es que en realidad construye una nueva matriz cada vez que usa el operador para que pueda agregar el nuevo elemento a la colección., No es exactamente eficiente, pero hace el trabajo. Usted no encontrará que con el enfoque ArrayList, ya que añade el elemento a la derecha en la colección.

al igual que con cualquiera de estos tipos de pruebas de rendimiento, cubrí el simple hasta el tipo extremo de situaciones, por lo que si absolutamente desea exprimir cada milisegundo posible de sus scripts de PowerShell, entonces definitivamente querrá mirar el enfoque ArrayList.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *