none
¿Cuál de estos dos bloques de código es más eficiente para llenar dos listas? RRS feed

  • Pregunta

  • Deseo obtener dos listas con enteros correlativos. Puedo hacerlo de estas dos formas. ¿Cuál será más eficiente?

    FORMA 1

    Private Lista1 As New List(Of Integer)
    Private Lista2 As New List(Of Integer)
    Lista1 = Enumerable.Range(1, 1000000).ToList
    Lista2 = Enumerable.Range(1, 1000000).ToList

    FORMA 2

    Private Lista1 As New List(Of Integer)
    Private Lista2 As New List(Of Integer)
    Lista1 = Enumerable.Range(1, 1000000).ToList
    Lista2.AddRange(Lista1.ToArray)

    ¿Cuál de las dos es más eficiente o no hay mayor diferencia? O si hay otra forma mejor, por favor díganla.


    • Editado James2016-2 sábado, 5 de septiembre de 2020 17:56
    sábado, 5 de septiembre de 2020 17:56

Respuestas

  • La segunda es mucho peor a causa del .ToArray. Es innecesario, el Addrange admite directamente un IEnumerable, por lo que le puedes pasar la lista1: Lista2.AddRange(Lista1)

    Si buscas la máxima eficiencia, suprime el primer New, que implica instanciar un objeto de forma innecesaria, ya que el ToList lo va a instanciar de nuevo.

    Private Lista2 As New List(Of Integer)
    Private Lista1 = Enumerable.Range(1, 1000000).ToList()
    Lista2.AddRange(Lista1)

    Con esto, creo que la forma 2 será ligerísimamente mejor que la 1, pero puedes cronometrarlo con un objeto StopWatch.

    Si al final te decides por la forma 1, recuerda eliminar los dos New que son superfluos.

    • Marcado como respuesta James2016-2 sábado, 5 de septiembre de 2020 20:50
    sábado, 5 de septiembre de 2020 19:45
  • Hola

    Veo que ya tienes una respuesta a tu pregunta. Si tienes otra consulta no dudes en abrir otro hilo.

    Saludos!

    --------------------------------------------------------------------------------

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    lunes, 7 de septiembre de 2020 17:41
    Moderador

Todas las respuestas

  • La segunda es mucho peor a causa del .ToArray. Es innecesario, el Addrange admite directamente un IEnumerable, por lo que le puedes pasar la lista1: Lista2.AddRange(Lista1)

    Si buscas la máxima eficiencia, suprime el primer New, que implica instanciar un objeto de forma innecesaria, ya que el ToList lo va a instanciar de nuevo.

    Private Lista2 As New List(Of Integer)
    Private Lista1 = Enumerable.Range(1, 1000000).ToList()
    Lista2.AddRange(Lista1)

    Con esto, creo que la forma 2 será ligerísimamente mejor que la 1, pero puedes cronometrarlo con un objeto StopWatch.

    Si al final te decides por la forma 1, recuerda eliminar los dos New que son superfluos.

    • Marcado como respuesta James2016-2 sábado, 5 de septiembre de 2020 20:50
    sábado, 5 de septiembre de 2020 19:45
  • Hola

    Veo que ya tienes una respuesta a tu pregunta. Si tienes otra consulta no dudes en abrir otro hilo.

    Saludos!

    --------------------------------------------------------------------------------

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    lunes, 7 de septiembre de 2020 17:41
    Moderador