Archivo de la etiqueta: .NET

Singleton y Lazy Loading en .NET 4

Singleton y Lazy Loading en .NET 4Hace tiempo me construí una clase Logger a partir de la de un compañero, añadiendo un par de detalles para adaptarla a mis necesidades. Es una clase muy útil para procesos que se ejecutan en consola o servicios de Windows o WCF. Se instancia de forma estática utilizando el patrón Singleton, de modo que cualquier proceso de la aplicación puede acceder a ella y escribir tanto en consola como en un archivo de texto lo que vamos haciendo. Llevo ya bastante tiempo usándola y nunca me ha dado problemas.

Pero el otro día otro compañero que la está utilizando me planteó una duda: le daba la sensación de que la clase estaba ralentizando la ejecución de su aplicación, la cual utilizaba varios subprocesos para realizar ejecuciones bastante costosas. Yo le comenté que había utilizado mi Logger con aplicaciones que también usaba múltiples hilos e incluso con la Task Parallel Library de .NET 4 y nunca había notado nada raro.

Aún así, me quedó la duda: ¿Es totalmente thread-safe una clase declarada mediante el patrón Singleton?

La respuesta, tras consultar un foro de debate en LinkedIn y un par de blogs, es que… ¿lo adivináis? Depende de vuestra implementación :-) Veámoslo en detalle.

Seguir leyendo »

Manipular XML en .NET

Hace poco tuve que manipular los resultados de una consulta FOR XML de SQL server. La query que me venía de base de datos contenía un campo con una sub-select que se imprimía en un string xml.

Dependiendo de unas restricciones de seguridad, para ciertos registros se tenían que eliminar algunos de los nodos del XML. Eso me obligaba a trasladar lógica de negocio a base de datos o bien tratar de aprovechar la potencia del framework .NET y Linq to XML.

Seguir leyendo »

Concatenar en un string los valores de una colección separados por comas

Con la actualización del framework .NET a la versión 4.0 se han introducido una serie de mejoras en el tipo string que nos facilitan la vida. Una de ellas es el método string.Join, que ha sido extendido para permitir concatenar cualquier colección de objetos que implemente la interfaz IEnumerable<T>. Es posible elegir el carácter de separación y concatenar matrices de objetos de cualquier tipo. En el siguiente ejemplo, se crea un string con los id’s de producto separados por comas:

IEnumerable<long> productIds = ProductService.Get();
 
string values = string.Join(",", productIds);