Preocupações de desempenho ConfigurationManager.AppSettings

votos
21

Eu pretendo estar armazenando todas as minhas configurações de configuração na seção config do meu aplicativo (usando a ConfigurationManager.AppSettingsclasse). Como o usuário altera as configurações usando (caixas de seleção clicando, a escolha de botões de rádio, etc.) UI do aplicativo, eu pretendo estar escrevendo essas mudanças para o AppSettings. Ao mesmo tempo, enquanto o programa está sendo executado eu pretendo estar acessando o AppSettingsconstantemente de um processo que estará processando constantemente dados. As alterações nas configurações por meio da UI precisa afetar o processamento de dados em tempo real, razão pela qual o processo será acessar a AppSettingsconstantemente.

Será esta uma boa idéia com relação ao desempenho? Usando AppSettingsé suposto ser o caminho certo para armazenar e definições de configuração de acesso ao escrever aplicativos .Net, mas me preocupo que este método não foi destinado para uma carga constante (pelo menos em termos de configurações sendo constantemente ler).

Se alguém tem experiência com isso, eu gostaria muito de receber a entrada.

Update: Eu provavelmente deveria esclarecer alguns pontos.

Esta não é uma aplicação web, então conectar um banco de dados para a aplicação pode ser um exagero simplesmente para armazenar definições de configuração. Esta é uma aplicação Windows Forms.

De acordo com o documention MSDN, o ConfigurationManageré para armazenar não apenas definições de nível de aplicação, mas as configurações do usuário também. (Especialmente importante se, por exemplo, a aplicação é instalado como uma aplicação de confiança parcial).

UPDATE 2: Eu aceitei resposta de lomaxx porque Properties, de fato, parecer uma boa solução, sem ter que adicionar quaisquer camadas adicionais ao meu pedido (tal como um banco de dados). Ao usar Properties, que já faz todo o cache que outros sugeriram. Isto significa que quaisquer alterações e leituras subsequentes são todos feitos na memória, tornando-o extremamente rápido. Propriedades só escreve as alterações no disco quando você diga a ele explicitamente. Isto significa que posso fazer alterações nas configurações de configuração on-the-fly em tempo de execução e só então fazer uma final salvar no disco quando o programa termina.

Apenas para verificar se ele realmente seria capaz de lidar com a carga eu preciso, eu fiz alguns testes no meu laptop e foi capaz de fazer 750.000 lê e escreve 7.500 por segundo propriedades usando. Isso é tão acima e além do que a minha aplicação será sempre sequer chegou perto de precisar que me sinto bastante seguro em usar propriedades sem afetar o desempenho.

Publicado 07/08/2008 em 01:12
fonte usuário
Em outras línguas...                            


8 respostas

votos
8

desde que você está usando um aplicativo winforms, se é em .NET 2.0 há realmente um sistema de configurações do usuário (chamado Propriedades) que é projetado para esta finalidade. Este artigo no MSDN tem uma boa introdução a este

Se você ainda está preocupado com o desempenho, em seguida, dar uma olhada em SQL Compact Edition que é semelhante ao SQLite, mas é a oferta da Microsoft que eu encontrei joga muito bem com winforms e há mesmo a capacidade de fazê-lo funcionar com Linq

Respondeu 07/08/2008 em 01:45
fonte usuário

votos
2

O appSettings não é realmente significou para o que você está tentando fazer.

Quando seu aplicativo .NET é iniciado, ele lê o arquivo app.config, e armazena seu conteúdo na memória. Por essa razão, depois de gravar o arquivo app.config, você vai ter que forçar alguma forma o tempo de execução para re-analisar o arquivo app.config para que ele possa armazenar em cache as configurações novamente. Isso é desnecessário

A melhor abordagem seria a utilização de um banco de dados para armazenar as definições de configuração.

Barrando o uso de um banco de dados, você pode facilmente configurar um arquivo de configuração XML externo. Quando seu aplicativo é iniciado, você pode armazenar em cache o seu conteúdo em um objeto NameValueCollection ou objeto HashTable. Como você mudar / configurações, você iria fazê-lo para que a cópia armazenada em cache. Quando seu aplicativo é desligado, ou em um intervalo de tempo adequado, você pode escrever o conteúdo do cache de volta para o arquivo.

Respondeu 07/08/2008 em 02:10
fonte usuário

votos
2

Dylan,

Não use o arquivo de configuração aplicativo para este fim, use um SQL DB (SQLite, MySQL, MSSQL, seja qual for), porque você vai ter que se preocupar menos com problemas de concorrência durante a lê e escreve para o arquivo de configuração.

Você também terá uma melhor flexibilidade no tipo de dados que você deseja armazenar. A seção appSettings é apenas uma lista de chave / valor que você pode superar o passar do tempo e como o aplicativo amadurece. Você pode usar seções de configuração personalizada, mas então você está em uma nova área problema quando se trata de design.

Respondeu 07/08/2008 em 01:56
fonte usuário

votos
2

Confira SQLite, ele parece ser uma boa opção para este cenário particular.

Respondeu 07/08/2008 em 01:41
fonte usuário

votos
1

Eu não usaria arquivos de configuração para armazenar os dados do usuário. Use um db.

Respondeu 07/08/2008 em 01:43
fonte usuário

votos
1

Alguém me corrija se eu estiver errado, mas eu não acho que AppSettings é tipicamente feito para ser usado para este tipo de definições de configuração. Normalmente, você só iria colocar em configurações que permanecem relativamente estáticos (seqüências de conexão de banco de dados, caminhos de arquivo, etc.). Se você deseja armazenar as configurações de usuário personalizável, seria melhor criar um arquivo de preferências separada, ou, idealmente, armazenar essas configurações em um banco de dados.

Respondeu 07/08/2008 em 01:26
fonte usuário

votos
0

uma coisa que eu iria olhar para fazer é cache os appsettings em uma leitura, em seguida, liberando as configurações do cache na gravação que deve minimizar a quantidade de carga real do servidor tem de lidar com para o processamento dos appSettings.

Além disso, se possível, olhar para quebrar as appSettings-se em configSections assim você pode ler as configurações relacionadas escrita e cache.

Dito tudo isso, eu iria seriamente considerar a olhar para armazenar esses valores em um banco de dados como você parece ser realmente armazenar as preferências do usuário , e não as configurações do aplicativo.

Respondeu 07/08/2008 em 01:28
fonte usuário

votos
0

Eu poderia perguntar por que você não está salvando as configurações do usuário em um banco de dados?

Geralmente, eu salvar as configurações do aplicativo que são alteradas muito raramente na seção appSettings (os logs de erros de endereços de e-mail padrão são enviados para, o número de minutos após o qual são automaticamente desconectado, etc.) O escopo deste realmente está no aplicativo , não ao utilizador, e é geralmente usado para as configurações de implantação.

Respondeu 07/08/2008 em 01:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more