Domanda

Ho intenzione di archiviare tutta la mia config impostazioni dell'applicazione in app.sezione config (utilizzando il ConfigurationManager.AppSettings di classe).Quando l'utente modifica le impostazioni utilizzando l'app UI (clic caselle di controllo, la scelta di pulsanti radio, etc.), Ho intenzione di scrivere quelle modifiche che l' AppSettings.Allo stesso tempo, mentre il programma è in esecuzione ho intenzione di accesso AppSettings costantemente da un processo che sarà costantemente l'elaborazione dei dati.Le modifiche apportate alle impostazioni tramite l'interfaccia utente è bisogno di influenzare l'elaborazione dei dati in tempo reale, che è il motivo per cui il processo di accesso AppSettings costantemente.

Questa è una buona idea per quanto riguarda le prestazioni?Utilizzando AppSettings dovrebbe essere "il modo giusto" per memorizzare e accedere alle impostazioni di configurazione quando si scrive .Net app, ma ho paura che questo metodo non era inteso per un carico costante (almeno in termini di impostazioni in fase di continua leggere).

Se qualcuno ha esperienza con questo, io apprezzo molto l'ingresso.

Aggiornamento: Probabilmente dovrei chiarire un paio di punti.

Questa non è una applicazione web, quindi il collegamento di un database per l'applicazione potrebbe essere eccessivo, semplicemente per memorizzare le impostazioni di configurazione.Questa è un'applicazione Windows Form.

Secondo la documentazione MSDN, il ConfigurationManager è per la memorizzazione non solo a livello di applicazione impostazioni, ma l'utente impostazioni.(Particolarmente importante se, per esempio, l'applicazione viene installata come attendibilità parziale applicazione.)

Aggiorna 2: Ho accettato lomaxx risposta perché Properties effettivamente apparire come una buona soluzione, senza dover aggiungere ulteriori strati per la mia applicazione (ad esempio un database).Quando utilizzando le Proprietà, lo fa già tutte le cache, che altri hanno proposto.Questo significa che qualsiasi modifica e successiva legge sono tutti fatti in memoria, rendendo estremamente veloce.Proprietà scrive solo le modifiche al disco quando viene esplicitamente detto.Questo significa che è possibile apportare modifiche alle impostazioni di configurazione on-the-fly in fase di esecuzione e quindi fare solo un finale salva su disco quando si chiude il programma.

Solo per verificare che fosse effettivamente in grado di gestire il carico di cui ho bisogno, ho fatto alcuni test sul mio portatile ed è stato in grado di fare da 750.000 legge e 7.500 scrive al secondo utilizzando le Proprietà.Che è così molto al di sopra e al di là di quello che la mia applicazione mai si è avvicinato al bisogno che mi sento abbastanza sicuro nell'utilizzo di Proprietà senza alcun impatto sulle prestazioni.

È stato utile?

Soluzione

dal momento che si sta utilizzando un form di windows app, se è nel .net 2.0, in realtà c'è un utente impostazioni di sistema (chiamato "Proprietà"), che è stato progettato per questo scopo. Questo articolo su MSDN ha una buona introduzione in questo

Se siete ancora preoccupati per le prestazioni poi dare un'occhiata al SQL Compact Edition che è simile a SQLite, ma è l'offerta Microsoft che ho trovato la gioca molto bene con winforms e c'è anche la possibilità di farlo funzionare con Linq

Altri suggerimenti

Check out SQLite, sembra una buona opzione per questo particolare scenario.

Dylan,

Non utilizzare l'applicazione file di configurazione per questo scopo, utilizzare un DB SQL (SQLite, MySQL, MSSQL, qualunque cosa), perché dovrete preoccuparsi meno di problemi di concorrenza nel corso legge e scrive i file di configurazione.

Avrete anche una maggiore flessibilità nel tipo di dati che si desidera conservare.La sezione appSettings è solo una chiave/valore di elenco che si possono pensiero di come il tempo passa e come l'applicazione matura.Si potrebbe usare di configurazione personalizzato sezioni, ma allora sei in una nuova area del problema quando si tratta di design.

AppSettings non serve per quello che stai cercando di fare.

Quando il vostro .NET si avvia l'applicazione, si legge in app.file di configurazione, e memorizza nella cache il suo contenuto in memoria.Per questo motivo, dopo aver scritto per l'app.file di configurazione, dovrete in qualche modo forzare il runtime di ri-analizzare l'app.file di configurazione quindi è possibile memorizzare le impostazioni di nuovo.Questo non è necessario

Il approccio migliore sarebbe utilizzare un database per memorizzare le impostazioni di configurazione.

Impedire l'utilizzo di un database, è possibile impostare facilmente un esterno file di configurazione XML.Quando l'applicazione viene avviata, è possibile memorizzare nella cache il contenuto in una NameValueCollection oggetto o oggetto HashTable.Come aggiungere/modificare le impostazioni, si dovrebbe fare per che copia memorizzata nella cache.Quando l'applicazione si chiude, o a un intervallo di tempo appropriato, è possibile scrivere il contenuto della cache di tornare al file.

Qualcuno mi corregga se sbaglio, ma non credo che AppSettings è in genere pensato per essere utilizzato per questo tipo di impostazioni di configurazione.Normalmente si dovrebbe solo mettere nelle impostazioni che rimangono abbastanza statico (stringhe di connessione al database, i percorsi dei file, etc.).Se si desidera memorizzare le impostazioni utente personalizzabili, sarebbe meglio creare un file di preferenze, o meglio memorizzare le impostazioni in un database.

Non vorrei usare i file di configurazione per la memorizzazione dei dati utente.Utilizzare un db.

Vorrei chiedere perché non stai salvando le impostazioni dell'utente in un database?

In generale, mi salva le impostazioni dell'applicazione che sono cambiato molto di rado nella sezione appSettings (l'indirizzo email di default registri di errore vengono inviati, il numero di minuti dopo i quali si sono disconnessi automaticamente, etc.) Il campo di applicazione di questo è realmente l'applicazione, non all'utente, ed è generalmente utilizzato per le impostazioni di distribuzione.

una cosa che vorrei cercare di fare le cache di appsettings su un letto, quindi lo svuotamento le impostazioni di cache di scrittura che dovrebbe ridurre al minimo la quantità di caricare il server ha a che fare con l'elaborazione appSettings.

Inoltre, se possibile, guardare breaking appSettings in configSections così si può leggere la scrittura della cache e le relative impostazioni.

Detto questo, vorrei seriamente considerare di memorizzazione di questi valori in un database, come lei sembra effettivamente essere la memorizzazione le preferenze dell'utente, e non le impostazioni dell'applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top