Probando el rendimiento de LINQ en ASP.Net

LINQ
Después de haber aprendido lo que es LINQ y cómo funciona, es obligado ver si, además de simplificar el código, mejora la eficiencia de nuestro proyecto.

Me he decidido por probar la lectura de archivos XML por parte de LINQ y determinar quien tiene mayor velocidad de lectura, la librería de acceso a XML de .Net o la nueva tecnología: LINQ. Para ello, he creado un XML con 100.000 registros que simula una tabla de alumnos y realizaré consultas a dicho XML.

Éstas son las consultas que he decidido realizar utilizando ambos sistemas:

  • Prueba 1: Extraer todos los alumnos que se llamen Jorge.
  • Prueba 2: Contar cuantos alumnos han aprobado.
  • Prueba 3: De entre los alumnos que se llaman Jorge, ¿cuántos han suspendido?
  • Prueba 4: De entre los alumnos que han sacado más de un 8, ¿cual es el nombre más predominante?
  • Prueba 5: Extraer sólo los nombres distintos de los alumnos y ordenarlos..

Continue reading Probando el rendimiento de LINQ en ASP.Net

Iniciación a LINQ en ASP.Net

LinQ Microsoft
Tras echarle un primer vistazo a LINQ hace unos meses finalmente me he puesto a darle caña a esta nueva tecnología desarrollada por Microsoft y que pretende facilitarnos las tareas a los desarrolladores.

¿Qué es LINQ?

LinQ (Language Integrated Query) es una nueva librería que se integra en Visual Studio 2008 y permite gestionar colecciones de datos de forma más directa utilizando un lenguaje similar al de SQL. Las colecciones de datos pueden proceder de un simple array, una base de datos relacional, un listado de objetos en caché, un archivo XML u orígenes de datos de terceros.

¿Cómo se usa LINQ?

Lo mejor para ver esto es poner un ejemplo de cómo se hacían antes las cosas y cómo pueden hacerse ahora gracias a LINQ:

Continue reading Iniciación a LINQ en ASP.Net

La foto de el Guille en Domitienda

Muchos de los que nos dedicamos a programar en visual basic conocemos a “el Guille”, un programador que cuelga muchos manuales, tutoriales, guías y trucos de visual basic desde hace muchos años y por ello ya hace mucho que se ganó el título de MVP.

Guille con los chicos de domitienda

Guille y los chicos de domitienda, de izquierda a derecha: Guille, Adolfo, Víctor y Jacob.

Hoy, rebuscando en el blog de domitienda he visto una foto del encuentro que los chicos de Domitienda tuvieron con el Guille en Valencia, y por fin, después de tantos años, he visto su foto, así que he decidido publicarla aquí para quienes como yo aun no hayan asistido a alguna de sus conferencias.

Cabe decir que el Guille es un sponsor de domitienda y además de recomendarla tiene todas sus webs alojadas en sus servidores, de hecho, fue por una recomendación de el Guille que yo también me uní a domitienda.

Lenguajes de Microsoft: C++, Visual Basic, FoxPro, ASP, .Net y Silverlight

Hoy estaba investigando Silverlight y me he tropezado con un resumen en inglés de los distintos lenguajes de programación que ha desarrollado Microsoft, me ha parecido muy interesante, así que lo traduzco y le añado algo de mi parte:

Microsoft Visual C++

Utilizado para escribir código de muy bajo nivel, permite un mayor control sobre la memoria y los recursos utilizados, pudiendo desarrollar aplicaciones mas eficientes, aunque, al ser de bajo nivel, requiere de más tiempo para desarrollarlas. En malas manos se pueden desarrollar aplicaciones de muy mala calidad si no se domina bien el uso de la memoria. El mismo Windows está desarrollado en C++.

Microsoft Visual Basic

Visual Basic 6.0El primer lenguaje (tras HTML) que yo aprendí. Las versiones de Visual Basic anteriores a .Net fueron desarrolladas para simplificar el trabajo del programador gestionando de forma automática la memoria del sistema y algunas tareas de bajo nivel, algo que en C++ debía hacer el programador.

Este hecho permitía desarrollar aplicaciones de mayor nivel en un menor tiempo, aunque sacrificando parte del rendimiento final de la aplicación. A causa de esto, los programadores de C++ siempre alegaron que sus aplicaciones eran mejores, pero los costes de desarrollo eran menores en VB, por lo que muchas empresas terminaban decantándose.
Continue reading Lenguajes de Microsoft: C++, Visual Basic, FoxPro, ASP, .Net y Silverlight

¿Cómo funcionan el StartsWith, Contains o EndsWith?

En .Net tenemos una función llamada StartsWith para saber si un String comienza con una serie de caracteres determinados, en principio, yo me imagino que si dicha función determina que el primer carácter ya no coincide dejará de comparar el resto y devolverá un false, no obstante he querido comprobar si eso es cierto comparando cuánto tarda con un String con el que si empieza, con otro con el que no empieza o con uno con el que coincide a medias; y para que no haya dudas, un poco a lo bestia… metiéndolo en un bucle de 5 millones de pasadas.

Bucle Segundos
StartsWith No Coincidente 1,789597
StartsWith Casi Coincidente 2,186570
StartsWith Coincidente 0,081005

Me sorprende que el coincidente sea el que menos consuma, ¿significa eso que .Net sigue comparando el resto de caracteres? Pero lo que me deja sin explicación alguna es ver que el coincidente a medias es el que más tiempo tarda… podría pensar que este string es más largo que el anterior y tendría sentido, pero sería absurdo pensar que el algoritmo StartsWith sigue comparando caracteres aunque ya haya encontrado uno no coincidente… ¿No les enseñaron a usar el Exit While?

Continue reading ¿Cómo funcionan el StartsWith, Contains o EndsWith?

String Builder vs String en ASP.Net

Como ya dije hace unos días, ando algo liado últimamente, aunque también puede que sea que necesito respirar un poco de aire fresco y hacer cosas distintas, por lo que temporalmente voy a pasarme poco por el blog. No obstante os traigo un pequeño experimento que hice el otro día en ASP.Net, en donde a través del sistema de trazas comprobé la eficacia del StringBuilder de .Net.

¿Stringloqué? StringBuilder es una clase de .Net que representa un String como un objeto, se encuentra en System.Text y su principal particularidad consiste en un menor consumo de recursos a la hora de formar una cadena de texto (de ahí su nombre). StringBuilder reserva un buffer de memoria de forma que cuando vas a insertar nuevos caracteres mira si el buffer es suficiente, si lo es los mete, si no lo es, amplia el búffer y los mete.

Pero, ¿que hacía entonces el String normal? El String normal tiene varias formas de ser concatenado, .Concat, .Join, “+” y “&”. Cada una de ellas distinta pero en principio todas iguales, la idea, y a menos que alguien me corrija y me saque del error, es que crea un nuevo objeto a partir de los ya existentes (un nuevo string), lo que parece consumir bastante mas RAM además de tiempo de proceso.

Yo, por curiosidá de esa que sólo un frikie informático tiene y por culpa de la cual nos consideran un reducto mutante de la sociedad (nosotros nos creemos pr0s) decidí generar un algoritmo facilón y activar el sistema de trazas para realizar carreras… ¿Queréis saber quien gana?

Continue reading String Builder vs String en ASP.Net