Frage

in meiner Anwendung (c # 3.5) gibt es verschiedene Prozesse eine einzelne XML-Datei zugreifen (lesen und schreiben) sehr häufig. der Code Zugriff auf die Datei wird in einer Baugruppe referenziert durch eine ganze Reihe von anderen Anwendungen platziert. beispielsweise ein Windows-Dienst könnte die MyFileReaderWriter Klasse (locatied in der zuvor erwähnten Montage) und verwenden Sie die Lese- / Schreib-Methoden dieser Klasse instanziiert.

Ich bin für die beste / schnellste Weg, um die Datei mit der geringsten Menge an Sperr zu lesen und erstellen / anhängen. die Dateien Daten-Caching und in regelmäßigen Abständen neue Inhalte Spülung ist keine Option, da die Daten kritisch ist.

Ich habe vergessen zu erwähnen, dass ich derzeit die XDocument (LInq2Xml Infrastruktur) zum Lesen / Schreiben des Inhalts in die Datei verwendet werden.

War es hilfreich?

Lösung

Mit beginnen, stellen Sie sicher, dass alle Zugriff auf das XML-Dokument durch eine einzelne Instanz durchgeführt wird.

Dann legen einen Verriegelungsmechanismus (das für Unlock WAIT) zu Beginn der Funktion, die sie zugreifen und sie am Ende entriegeln.

Andere Tipps

Wenn Sie mit dem Schreiben sind Sie nur an das Dokument angehängt wird, dann ist dieser Versuch

http://msdn.microsoft.com/en-us/library /aa302289.aspx

Im Grunde Ihres XML-Dokument ist eine Schale mit einem Start- und End-Tag. Zwischen den Tags ist eine Referenz enthalten, die eine andere Datei verweist, diese andere Datei ist der Körper des XML-Dokuments. Für Schreiboperationen ist dies ein Vielfaches schneller, weil Sie nicht über die XML laden müssen, um jedes Mal, wenn Sie es schreiben, Datei, und Sie müssen nicht die gesamte Datei jedes Mal schreiben.

Mit einem XmlWriter Klasse können Sie ganz einfach Knoten an das Ende des Körpers Datei anhängen.

Wenn andere die XML lesen wollen, sie einfach öffnen Sie das Dokument, ihren XML-Parser „weiß“, um beiden Dateien zu laden und zu analysieren.

Hope, das hilft.

Was meinen Sie die Daten kritisch ist? Wird die XML-Datei von Ihrer Anwendung nicht ausschließlich verwendet?

So einfach (und vielleicht gut genug) Art und Weise IO Zugriff auf die Datei zu sperren, wäre eine statische Factory-Klasse zu erstellen, die ein „lesen, schreiben Token“ Objekt bereitstellt, die jede E / A-Operation hätte eine Sperre haben auf.

public static object GetReadWriteToken(String fileName)
{
    //use a hashtable to retreive an object, with filename as key
    return token;
}

und einfach tun dies, während das Lesen und Schreiben:

lock(GetReadWriteToken(@"C:\important.xml"))
{
    //io code
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top