Frage

Ich Plane, speichern alle meine config Einstellungen in meiner Anwendung, app.config-Abschnitt (mit der ConfigurationManager.AppSettings Klasse).Als der Benutzer ändert die Einstellungen über die Benutzeroberfläche der app (Klick auf eine checkbox, die Wahl radio-buttons, etc.), Ich Plane zu schreiben, werden diese änderungen aus, um die AppSettings.Zur gleichen Zeit, während das Programm läuft, ich plan den Zugriff auf die AppSettings ständig von einem Prozess, der ständig Verarbeitung der Daten.Änderungen der Einstellungen über die Benutzeroberfläche erstellen müssen, Einfluss auf die Datenverarbeitung in Echtzeit, das ist der Grund, warum der Prozess den Zugriff auf die AppSettings ständig.

Ist das eine gute Idee mit Hinblick auf die performance?Verwendung AppSettings werden soll, um den "richtigen Weg" zu speichern und Zugriff auf die Konfiguration der Einstellungen beim schreiben .Net-apps, aber ich habe Angst, dass diese Methode nicht nur für eine Konstante Last (zumindest im Hinblick auf Einstellungen, ständig zu Lesen).

Hat jemand Erfahrung damit, ich würde stark schätzen Sie die Eingabe.

Update: Vielleicht sollte ich klären ein paar Punkte.

Dies ist nicht eine web-Anwendung, so verbinden Sie eine Datenbank an die Anwendung möglicherweise übertrieben, einfach für die Speicherung von Konfigurations-Einstellungen.Dies ist eine Windows Forms-Anwendung.

Laut der MSDN-Dokumentation, die ConfigurationManager wird für die Speicherung von nicht nur application-level-Einstellungen, Benutzereinstellungen, wie gut.(Besonders wichtig, wenn zum Beispiel die Anwendung installiert ist als eine teilweise vertrauenswürdigen Anwendung.)

Update 2: Ich nahm lomaxx Antwort, weil Properties tatsächlich sehen aus wie eine gute Lösung, ohne dass Sie zusätzliche Schichten, um meine Anwendung (z.B. einer Datenbank).Bei der Verwendung von Eigenschaften, die es bereits tut all die Zwischenspeicherung, die andere vorgeschlagen.Dies bedeutet, dass alle änderungen und nachfolgende Lesevorgänge sind alle getan in-Speicher, so dass es extrem schnell.Eigenschaften schreibt nur die änderungen auf die Festplatte, wenn Sie ausdrücklich auffordern.Dies bedeutet, ich kann änderungen an den config Einstellungen on-the-fly zur Laufzeit und dann nur einem endgültigen speichern auf die Festplatte, wenn das Programm beendet.

Nur um sicher zu gehen wäre es tatsächlich in der Lage sein, um die Last zu bewältigen ich brauche, habe ich einige Tests auf meinem laptop und war in der Lage zu tun, von 750.000 liest und 7.500 Schreibvorgänge pro Sekunde mit Eigenschaften.Das ist so weit über das hinaus, was meine Anwendung je auch nur nahe kommen zu müssen, dass ich fühle mich ziemlich sicher in verwenden von Eigenschaften ohne Beeinträchtigung der Leistung.

War es hilfreich?

Lösung

da Sie mit einer winforms-app, wenn es in .net 2.0 gibt es eine user-system-Einstellungen (Eigenschaften), die für diesen Zweck konzipiert. Dieser Artikel auf der MSDN-Website hat eine ziemlich gute Einführung in diese

Wenn Sie immer noch besorgt über die Leistung, dann werfen Sie einen Blick auf SQL Compact Edition das ist ähnlich wie SQLite, aber ist das Microsoft-Angebot ich gefunden habe, spielt sehr schön mit winforms und es gibt sogar die Möglichkeit, machen es Arbeit mit Linq

Andere Tipps

Check out SQLite, es scheint wie eine gute option für dieses bestimmte Szenario.

Dylan,

Verwenden Sie nicht die Anwendung config-Datei für diesen Zweck verwenden Sie eine SQL-Datenbank (SQLite, MySQL, MSSQL, was auch immer), weil Sie müssen sorgen weniger über die Parallelität Probleme bei lese-und Schreibzugriffe auf die config-Datei.

Sie haben auch mehr Flexibilität in der Art der Daten, die Sie speichern möchten.Die appSettings-Abschnitt ist nur ein Schlüssel/Wert-Liste, die Sie möglicherweise entwachsen, wie die Zeit vergeht und wie die app reift.Sie könnte verwenden Sie benutzerdefinierte config-Abschnitte, aber dann sind Sie in eine neue problem-Bereich, wenn es um die Gestaltung.

Die App ist nicht wirklich gemeint, was Sie zu tun versuchen.

Wenn Ihr .NET-Anwendung gestartet wird, liest es in der app.config-Datei und speichert den Inhalt in den Speicher.Aus diesem Grund, Sie nach dem schreiben auf die app.config-Datei, müssen Sie irgendwie zwingen, die Laufzeit zu re-analysieren Sie die app.config-Datei so kann es-cache die Einstellungen erneut vor.Dies ist unnötig

Die beste Ansatz wäre die Verwendung einer Datenbank zum speichern Ihrer Konfigurationseinstellungen.

Abgesehen von der Verwendung einer Datenbank, können Sie leicht setup ein externes XML-Konfiguration-Datei.Wenn Ihre Anwendung gestartet wird, könnten Sie cache-Inhalt in eine NameValueCollection Objekt oder HashTable-Objekt.Beim ändern/hinzufügen von Einstellungen, Sie würde es tun, um das zwischengespeicherte Kopie.Wenn die Anwendung heruntergefahren wird, oder bei einem angemessenen Zeit-Intervall, können Sie den cache-Inhalt zurück in die Datei.

Jemand korrigiert mich, wenn ich falsch Liege, aber ich glaube nicht, dass AppSettings ist in der Regel dazu genutzt werden, um für diese Art der Konfiguration-Einstellungen.Normalerweise würden Sie nur die Einstellungen, die bleiben relativ statisch (Datenbank Verbindung strings, Dateipfaden, etc.).Wenn Sie speichern möchten, anpassbare Benutzer-Einstellungen, wäre es besser, erstellen Sie eine separate Datei Einstellungen, oder im Idealfall speichern der Einstellungen in einer Datenbank.

Würde ich nicht verwenden, config-Dateien zum speichern von Benutzerdaten.Ein db.

Könnte ich Fragen, warum Sie nicht speichern die Einstellungen des Benutzers in einer Datenbank?

Im Allgemeinen, ich speichern Sie die Anwendung Einstellungen, die nur sehr selten geändert, in der appSettings-Abschnitt (die Standard-E-Mail-Adresse Fehler Protokolle gesendet werden, um die Anzahl der Minuten ein, nach der Sie automatisch abgemeldet, etc.) Der Umfang dieses ist wirklich in der Anwendung, nicht auf den Benutzer, und ist in der Regel verwendet für die deployment-Einstellungen.

eine Sache, die ich Aussehen würde zu tun, ist die Zwischenspeicherung der appsettings auf Lesen, dann Spülen Sie die Einstellungen aus dem cache auf dem schreiben sollte die Minimierung der Menge der tatsächliche Belastung der server zu tun hat, die für die Verarbeitung der appSettings.

Auch, wenn möglich, zu brechen, die appSettings in configSections so können Sie schreib-und cache-bezogene Einstellungen.

Nachdem alles gesagt, dass, würde ich ernsthaft erwägen, betrachten die Speicherung dieser Werte in einer Datenbank, wie Sie scheinen tatsächlich gespeichert werden Benutzer-Einstellungen, und nicht die Anwendung Einstellungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top