domingo, 30 de octubre de 2016

PLinQ 2



En este nuevo post de PLinQ, nos vamos a centrar en los métodos más importantes de ParalallelEnumerable, decimos los más importantes, ya que nos ofrecen una funcionalidad extra para nuestras consultas parametrizadas.

Cabe destacar, como nombramos en el anterior post de PLinQ, que la clase ParallelEnumerable, tiene una definición para cada uno de los métodos extensores (operadores de consulta) de la clase System.LinQ, para hacer completamente transparente su uso, de modo que pensemos que estamos utilizando una consulta simple a un IEnumerable.





sábado, 22 de octubre de 2016

PlinQ 1



A forma de introducción, PLinQ, ofrece la capacidad de realizar consultas LinQ To Objects, de forma paralela, ósea utilizando todos los cores (núcleos) de el microprocesador. En un primer vistazo, podemos pensar que esto es magia, pero como veremos a continuación, no es algo que sea 100% recomendable en todos los casos, y puede llegar a tener una serie de consideraciones y fallos, que o bien no conocemos o no estamos acostumbrados en la programación síncrona.

Una de las ideas que solemos tener en nuestra cabeza acerca de la programación en paralelo, es que si poseemos una máquina con 4 cores o microprocesadores, un trabajo que tarda en hacerse 20 segundos, debería de tardar 20/4, solo 5 segundos. Esto no es cierto, hay algunos casos en que la ejecución sobre un único núcleo es más rápida que sobre n. La diferencia radica, en que para poder hacer una ejecución en paralelo es necesario particionar la información en trozos, para que cada uno de estos, sea tratado por un núcleo y luego volver a fusionar la información. Todo este trabajo, conlleva un sobrecoste, que en ocasiones no es conveniente.

lunes, 16 de mayo de 2016

Let




Una entrada que pudiera ser no merecedora de un espacio para ella sola. La cláusula Let, tiene una serie de virtudes que van desde una mejora notable en la lectura y comprensión del código, hasta un incremento en el rendimiento por la reducción de llamadas redundantes.


La única nota negativa, pero no menos importante, es que esta cláusula, solo puede utilizarse con sintaxis de consulta (azúcar sintáctico), por lo que nuestras queridas Lambdas se quedan fuera.






domingo, 8 de mayo de 2016

Operadores de Conversión






Como su propio nombre indica, los operadores de conversión realizan transformaciones de datos de un tipo de colecciones a otras.


En este caso tenemos un grupo de operadores de conversión que son de ejecución instantánea, compuesta por los operadores ToList, ToArray, ToLookUp y ToDictionary, y otro grupo de carga perezosa o diferida, compuesta por OffType y Cast. De este último tipo también sería el operador AsEnumerable, pero en éste no pondremos mucho énfasis, ya que es un operador que se utiliza más en LinqToSql o LinqToEntities, y este curso es de LinqToObjects.





domingo, 1 de mayo de 2016

Operadores de Ordenación


Llegamos al grupo de operadores destinados a realizar el trabajo de ordenación en nuestras colecciones. Dentro de este apartado nos encontramos con un nuevo actor de este teatro, un actor que tiene una importancia mínima pero que forma parte de todo este tinglao, es la interfaz IOrderedEnumerable<TElement> . Es una interfaz super simple, que hereda de IEnumerable<TElement>  y de IEnumerable, y que simplemente añade un método CreateOrderedEnumerable, cuya función será la de crear las ordenaciones. Es importante nombrarla ya que será el tipo de devolución que generen nuestros operadores de ordenación OrderBy, OrderByDescending, ThenBy y ThenByDescending.

Llegados a este momento del repaso de LinQ, volveremos a ver las diferencias para estos operadores entre la sintaxis de consultas y nuestras queridas Lambdas.