¡Recomienda este blog!

jueves, 6 de diciembre de 2012

Linq y PLinq en desarrollos .net

LINQ es un conjunto de extensiones de .NET Framework que abarca operaciones de consulta integrada del lenguaje, conjuntos y transformaciones. Amplía C# y Visual Basic con sintaxis de lenguaje nativo para las consultas a bases de datos como SQL y XML, y proporciona bibliotecas de clases para sacar partido de estas capacidades, facilitando así la recuperación, modificación y eliminación de la información (Microsoft).

De este modo, en vez de añadir características específicas para el tratamiento de datos relacionales (XML) a los diferentes lenguajes de programación y motores de ejecución, con el proyecto LINQ se consigue un enfoque más universal, añadiendo facilidades de consulta de propósito general aplicables a todas las fuentes de información, y no solo a los datos relacionales. Esta facilidad se llama “Consultas integradas en los lenguajes” 1 (MSDN, El proyecto LINQ, 2006)

Por otro lado, y teniendo en cuenta el avance de la tecnología y el nacimiento de los procesadores multinúcleo, el paradigma de LINQ cambia de perspectiva y en el Framework 3.0 de .NET, nace una nueva versión de implementación en paralelo para el modelo llamado Parallel LINQ (PLINQ), que permite realizar consultas utilizando la potencia del procesamiento en paralelo.

Linq to XML


Si se busca información acerca de este estándar, se observa la gran importancia que ha adoptado el  XML como un modo de dar formato a datos en diversos contextos. 

Linq To XML es un nuevo método para realizar desarrollos utilizando este estándar cómo sistema de almacenamiento de la información, de este modo, es posible hacer uso de las distintas comodidades que ofrece LINQ para realizar consultas a este tipo de ficheros de forma rápida y ordenada. 

Por tanto, Linq To XML no es más que una interfaz de programación para desarrollos .NET que permite la realización de consultas para la recuperación de colecciones de datos y atributos, y la modificación e inserción de información en ficheros XML. De esta forma, al estar completamente integrado con LINQ, los desarrolladores pueden aumentar considerablemente su productividad y programar de una forma más sencilla, expresiva, compacta y eficaz. En la que se puede:
  • Cargar XML a partir de archivos o secuencias.
  • Serializar XML a archivos o secuencias.
  • Crear árboles XML desde cero mediante la construcción funcional.
  • Realizar consultas de XML con ejes de tipo XPath.
  • Manipular el árbol XML en memoria con métodos como Add, Remove. Etc.
  • Validar árboles XML mediante XSD.
  • Usar una combinación de estas características para transformar las formas de los árboles XML.
PLinq
Como se comentó anteriormente, PLINQ trata de mejorar y acelerar la ejecución de LINQ mediante la ejecución de consultas en paralelo en equipos multiprocesador. 

Esto es realmente útil en aquellos sistemas en los que es necesario obtener una gran cantidad de información en el menor tiempo posible, obteniendo un rendimiento óptimo cuando cada elemento de la colección que se desea consultar proviene de orígenes independientes. 


Aunque en ocasiones las diferentes consultas contienen operadores que no se pueden paralelizar, con lo que en tal caso se podría incluso ralentizar aún más el sistema en general si se realiza una ejecución en paralelo. (MSDN, Parallel LINQ (PLINQ))
Ejemplo en C#:
//Buena consulta para LINQ
var queryA = from num in numberList.AsParallel()
select ExpensiveFunction(num); 
// Consulta desapropiada para PLINQ.
var queryB = from num in numberList.AsParallel()
where num % 2 > 0 // El resultado depende del Where.
select num;
El procesamiento en paralelo, se consigue creando diferentes particiones del origen de los datos y programas. 

Estos trabajan como subprocesos en cada uno de los núcleos del microprocesador, combinando los resultados una vez completada la consulta. Lo que implica la agregación de un coste de paralelización al coste computacional final.

0 comentarios:

Publicar un comentario