Buscar este blog

sábado, 25 de mayo de 2013

Trucos de rendimiento en linq

Usar linq es muy tentador por la forma en que hace fácil escribir código sobre colecciones de valores ya sea en objetos, xml, sql o cualquier otra forma de agrupar valores, sin embargo hay que tener mucho cuidado con su uso ya que podemos caer en trampas que hacen el código muy lento, por ejemplo: en linq a objetos es muy fácil crear una expresión que busque un objeto con un determinado valor en una propiedad, sin embargo la trampa es que linq recorre toda la colección y compara objeto por objeto con el valor buscado, en colecciones pequeñas esto no es un problema pero si manejas un número de objetos significativo tu programa se puede alentar bastante, una posible solución es usar un árbol e indizarlo usando la propiedad que vas a buscar con lo que el rendimiento puede mejorarse incluso en varios de magnitud.
Otro ejemplo linq a xml, en este caso el problema es que el xml se almacena por completo en memoria, siendo una vez mas un problema con archivos grandes que nos pueden usar hasta gigabytes de memoria para archivos de solo unos megas, en estos casos puede convenir mas usar el xmlreader que lee los elementos uno por uno desde el stream y luego los descarta usando por lo tanto poquísima memoria.

Por supuesto las necesidades de cada programa varían y puedes encontrarte en que no tengas otra solución que usar linq.

No hay comentarios:

Publicar un comentario