Pregunta

Planeo almacenar todas mis configuraciones en la sección app.config de mi aplicación (usando el ConfigurationManager.AppSettings clase).A medida que el usuario cambia la configuración usando la interfaz de usuario de la aplicación (haciendo clic en casillas de verificación, eligiendo botones de opción, etc.), planeo escribir esos cambios en el AppSettings.Al mismo tiempo, mientras el programa se está ejecutando, planeo acceder al AppSettings constantemente de un proceso que estará procesando datos constantemente.Los cambios en la configuración a través de la interfaz de usuario deben afectar el procesamiento de datos en tiempo real, razón por la cual el proceso accederá a la AppSettings constantemente.

¿Es esta una buena idea con respecto al rendimiento?Usando AppSettings se supone que es "la forma correcta" de almacenar y acceder a los ajustes de configuración al escribir aplicaciones .Net, pero me preocupa que este método no esté diseñado para una carga constante (al menos en términos de configuración que se lee constantemente).

Si alguien tiene experiencia con esto, agradecería mucho el aporte.

Actualizar: Probablemente debería aclarar algunos puntos.

Esta no es una aplicación web, por lo que conectar una base de datos a la aplicación puede resultar excesivo simplemente para almacenar los ajustes de configuración.Esta es una aplicación de formularios de Windows.

Según la documentación de MSDN, el ConfigurationManager es para almacenar no solo la configuración a nivel de aplicación, sino también la configuración del usuario.(Especialmente importante si, por ejemplo, la aplicación está instalada como una aplicación de confianza parcial).

Actualización 2: Acepté la respuesta de lomaxx porque Properties De hecho, parece una buena solución, sin tener que agregar capas adicionales a mi aplicación (como una base de datos).Al usar Propiedades, ya realiza todo el almacenamiento en caché que otros sugirieron.Esto significa que todos los cambios y lecturas posteriores se realizan en la memoria, lo que lo hace extremadamente rápido.Propiedades solo escribe los cambios en el disco cuando usted se lo indica explícitamente.Esto significa que puedo realizar cambios en la configuración sobre la marcha en tiempo de ejecución y luego solo realizar un guardado final en el disco cuando se cierra el programa.

Sólo para verificar que realmente sería capaz de manejar la carga que necesito, hice algunas pruebas en mi computadora portátil y pude realizar 750,000 lecturas y 7,500 escrituras por segundo usando Propiedades.Esto va mucho más allá de lo que mi solicitud alguna vez Incluso estoy cerca de necesitar que me sienta bastante seguro al usar Propiedades sin afectar el rendimiento.

¿Fue útil?

Solución

Dado que estás usando una aplicación Winforms, si está en .net 2.0, en realidad hay un sistema de configuración de usuario (llamado Propiedades) diseñado para este propósito. Este artículo en MSDN tiene una muy buena introducción a esto

Si todavía estás preocupado por el rendimiento, echa un vistazo a Edición compacta de SQL que es similar a SQLite pero es la oferta de Microsoft que he descubierto que funciona muy bien con winforms e incluso existe la posibilidad de hazlo funcionar con Linq

Otros consejos

Consulte SQLite, parece una buena opción para este escenario en particular.

Dylan,

No use el archivo de configuración de la aplicación para este propósito, use una base de datos SQL (SQLite, MySQL, MSSQL, lo que sea) porque tendrá que preocuparse menos por los problemas de concurrencia durante las lecturas y escrituras en el archivo de configuración.

También tendrá una mayor flexibilidad en el tipo de datos que desea almacenar.La sección appSettings es solo una lista de claves/valores que puede superar a medida que pasa el tiempo y la aplicación madura.Podrías usar secciones de configuración personalizadas, pero luego te encontrarás con una nueva área problemática en lo que respecta al diseño.

La configuración de la aplicación no está realmente diseñada para lo que intentas hacer.

Cuando se inicia su aplicación .NET, lee el archivo app.config y almacena en caché su contenido en la memoria.Por esa razón, después de escribir en el archivo app.config, tendrá que forzar de alguna manera el tiempo de ejecución para que vuelva a analizar el archivo app.config para que pueda almacenar en caché la configuración nuevamente.esto es innecesario

El mejor enfoque Sería utilizar una base de datos para almacenar sus ajustes de configuración.

Salvo el uso de una base de datos, puede configurar fácilmente un archivo de configuración XML externo.Cuando se inicia su aplicación, puede almacenar en caché su contenido en un objeto NameValueCollection o en un objeto HashTable.A medida que cambia/agrega configuraciones, lo haría en esa copia en caché.Cuando su aplicación se cierra, o en un intervalo de tiempo adecuado, puede volver a escribir el contenido de la caché en un archivo.

Alguien me corrija si me equivoco, pero no creo que AppSettings normalmente deba usarse para este tipo de ajustes de configuración.Normalmente, sólo introducirías configuraciones que permanezcan bastante estáticas (cadenas de conexión de bases de datos, rutas de archivos, etc.).Si desea almacenar configuraciones de usuario personalizables, sería mejor crear un archivo de preferencias separado o, idealmente, almacenar esas configuraciones en una base de datos.

No usaría archivos de configuración para almacenar datos de usuario.Utilice una base de datos.

¿Puedo preguntar por qué no guarda la configuración del usuario en una base de datos?

Generalmente, guardo las configuraciones de la aplicación que se cambian con muy poca frecuencia en la sección appSettings (los registros de errores de la dirección de correo electrónico predeterminada a la que se envían, la cantidad de minutos después de los cuales se cierra la sesión automáticamente, etc.). El alcance de esto realmente está en la aplicación. , no al usuario, y generalmente se usa para la configuración de implementación.

Una cosa que consideraría hacer es almacenar en caché la configuración de la aplicación en una lectura y luego eliminar la configuración del caché en la escritura, lo que debería minimizar la cantidad de carga real con la que tiene que lidiar el servidor para procesar la configuración de la aplicación.

Además, si es posible, considere dividir la configuración de la aplicación en secciones de configuración para que pueda leer las configuraciones relacionadas con la escritura y el caché.

Habiendo dicho todo eso, consideraría seriamente almacenar estos valores en una base de datos, ya que parece que usted realmente está almacenando Preferencias del usuario, y no la configuración de la aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top