¿Existe un método sencillo de acceder a los datos de configuración personalizados basados en configuración del sistema mediante una interfaz segura para subprocesos sin que cada contexto de ejecución cargue o vuelva a cargar información de configuración que sería computacionalmente onerosa?Uso seguro de subprocesos de System.Configuration
clases System.Configuration, como la mayoría (todos?) Otras clases de documentación de la biblioteca .Net de Microsoft, se anotan los siguientes datos hilo de seguridad:
estáticos públicos (Shared en Visual Basic) de este tipo son seguros para subprocesos. No se garantiza que ningún miembro de instancia sea seguro para subprocesos.
Por mi lectura de esto, los ConfigurationSection
objetos devueltos desde las ConfigurationManager.GetSection(string)
y otros métodos similares (por ejemplo OpenExeConfiguration(string exePath).GetSection(string)
) no debe suponerse que ser seguro para subprocesos y por lo tanto no debe ser usado por múltiples contextos de ejecución. Esto prohíbe almacenar un ConfigurationSection
en un singleton que, de lo contrario, sería seguro para subprocesos porque, aunque el acceso al objeto de sección puede ser seguro, los miembros del objeto en sí no son seguros.
Sin embargo, es probable que varias llamadas al GetSection
requieran un nuevo análisis de los archivos de configuración y la asignación de nuevas instancias ConfigurationSection
que tienen una sobrecarga alta considerando que es probable que la configuración nunca cambie después de la inicialización. Además, copiar los datos de configuración en otro objeto que se ha hecho seguro para subprocesos parece frustrar uno de los principales beneficios del uso del paquete de configuración integrado en primer lugar (fácil acceso a la información de configuración validada y convertida tipo sin mucha repetición código).
Entonces, ¿hay alguna manera de usar System.Configuration
de manera segura sin recurrir a análisis excesivos y asignaciones de secciones de configuración? ¿La implementación de su propio ConfigurationSection
lo libera de la falta de garantía proporcionada por Microsoft aunque está accediendo a través de las interfaces System.Configuration
(y si es así, cómo lo implementaría para que sea seguro para subprocesos cuando se accede al indexador base ConfigurationSection
? es necesario para acceder a los datos configurados)?
He estado teniendo un servidor IIS al azar durante los últimos 5 meses debido a esto. No tenía idea de por qué (el bloqueo era un desbordamiento de pila en MSCorLib) hasta que sucedió en mi máquina de desarrollo, y una llamada de aplicación lo había provocado. Creo que esto responde mi pregunta. Gracias. –