2012-04-16 18 views
5

Sólo una pregunta general, estoy desarrollando una aplicación web ASP.NET MVC 3 que lee de un archivo de configuración utilizando el lector de corriente dentro de una sentencia Usando para la eliminación automática de la siguiente manera:Preocupado por los puntos muertos con C# StreamReader

using (StreamReader sr = new StreamReader(filepath)) 
{ 

} 

Mi preocupación es que cuando varios usuarios ejecutan la aplicación, se producirá un interbloqueo cuando varias instancias de la aplicación están leyendo valores del archivo de configuración. Mi pregunta es, ¿son los interbloqueos un problema cuando se trabaja con la clase Stream Reader? Intuitivamente, pensaría que no, ya que supongo que Stream Reader está abriendo el archivo en modo de solo lectura y no hay procesos externos que escriben en el archivo de configuración que no sean ediciones manuales. Solo quería estar seguro de si esto sería un problema. Cualquier idea es apreciada.

Respuesta

8

Mi preocupación es que cuando varios usuarios están ejecutando la aplicación, un callejón sin salida se producirá cuando varias instancias de la aplicación son valores de lectura del archivo de configuración

No, no se preocupe. No se producirá un punto muerto. Estás abriendo el archivo para leer. Entonces podrías tener lectores concurrentes. Pero si escribe en este archivo en alguna otra ubicación de su código, obtendrá una excepción. Pero no hay punto muerto. Si desea sincronizar correctamente lectores y escritores con algún recurso compartido, como un archivo, puede usar la clase ReaderWriterLockSlim. Si nunca escribe en el archivo (del mismo proceso o de otro proceso), entonces está bien. Pero si nunca escribe en el archivo, para evitar leer y analizar este archivo cada vez, solo debe leerlo una vez y guardarlo en alguna estructura de memoria. Por ejemplo, así es como funciona el sistema de configuración de la aplicación .NET. Lee y analiza la aplicación/web.config una vez cuando ejecuta la aplicación y luego la almacena en la memoria para un acceso más rápido. Pero, por supuesto, todo dependerá de su situación exacta.

+1

Además, si realmente le preocupan las múltiples personas que leen este archivo de configuración, debe leerlo una vez dentro de un área segura de subprocesos y luego almacenarlo en caché para usarlo en el futuro. – Tejs

+0

@Tejs, muy buen punto. Actualizaré mi respuesta para tenerla en cuenta. –

Cuestiones relacionadas