He usado .Net 3.5 y VS 2008 durante más de un mes. Como la mayoría de los desarrolladores de .Net, he evolucionado a partir de la experiencia de años en .Net 1.0 & 2.0 y VS 2005. Recientemente, descubrí la simplicidad y el poder de LINQ y Lambda Expressions, como en mis preguntas recientes como Find an item in list by LINQ, Convert or map a class instance to a list of another one by using Lambda or LINQ y Convert or map a list of class to another list of class by using Lambda or LINQ .¿Cuál es la eficiencia y el rendimiento de LINQ y Lambda Expression en .Net?
Admito que Lambda y LINQ son mucho más simples y fáciles de leer y parecen ser muy potentes. Detrás de escena, el compilador .Net debe generar muchos códigos para lograr esas funciones. Por lo tanto, estoy un poco indeciso para cambiar a la nueva sintaxis ya que ya conozco la "vieja" forma de lograr los mismos resultados.
Mi pregunta es acerca de la eficiencia y el rendimiento de Lambda y LINQ. Quizás las expresiones de Lambda son en su mayoría funciones en línea, en ese caso creo que Lambda debería estar bien. ¿Qué hay de LINQ?
Limitemos la discusión a LINQ-to-Objects LINQ-to-SQL (LINQ-to-SQL). ¿Algún comentario, comparación y experiencias?
Ese ejemplo realmente no es una buena prueba. En primer lugar, está comparando una sola iteración inversa + eliminar a iteración doble + creación de lista + eliminar. En segundo lugar, ¿por qué eliminar cuando puede * seleccionar los valores que desea *? Este método, usando LINQ es incluso más rápido que reverse-for + delete. En tercer lugar, no tiene en cuenta a JIT, al ejecutar mis pruebas dos veces muestra que, por segunda vez, el método LINQ es (sorprendentemente) 100 veces más rápido. Mis hallazgos: http://img188.imageshack.us/img188/4408/linq.png Donde "Silly LINQ" es su método de doble iteración + creación + eliminar. – JulianR
Seguimiento: esa prueba no fue tanto una prueba de LINQ frente a "construcciones tradicionales", sino una prueba de código eficiente versus código ineficiente. Por ejemplo, el método List .RemoveAll (Predicate ) es mucho más rápido que el método de iteración inversa + eliminar, ¡y ciertamente mucho más bonito que escribir de esta manera eficiente usted mismo! Así que en segundo lugar su opinión es que no use un método basado en supuestos sobre la eficiencia que demuestren estar equivocados ("los constructos elegantes son lentos"), sino que se basan en la corrección. –
JulianR
Cosas interesantes y geniales. –