2012-04-16 5 views
5

Nur eine allgemeine Frage, Ich entwickle eine ASP.NET MVC 3 Web-Anwendung, die aus einer Konfigurationsdatei liest den Stream-Reader in einer Using-Anweisung zur automatischen Entsorgung wie folgt verwendet:Besorgt über Deadlocks mit C# Stream

using (StreamReader sr = new StreamReader(filepath)) 
{ 

} 

Meine Sorge ist, dass, wenn mehrere Benutzer die Anwendung ausführen, ein Deadlock auftreten wird, wenn mehrere Instanzen der Anwendung Werte aus der Konfigurationsdatei lesen. Meine Frage ist, sind Deadlocks ein Problem bei der Arbeit mit der Stream Reader-Klasse? Intuitiv würde ich das nicht glauben, da ich annahm, dass der Stream Reader die Datei im schreibgeschützten Modus öffnet und keine externen Prozesse in die Konfigurationsdatei schreiben außer manuelle Bearbeitungen. Ich wollte nur sicher sein, ob das ein Problem ist oder nicht. Jeder Einblick wird geschätzt.

Antwort

8

Meine Sorge ist, dass, wenn mehrere Benutzer die Anwendung ausgeführt wird, ein Deadlock tritt auf, wenn mehrere Instanzen der Anwendung sind Lesewerte aus der Konfigurationsdatei

Nein, keine Sorge. Kein Deadlock wird auftreten. Sie öffnen die Datei zum Lesen. So könnten Sie gleichzeitige Leser haben. Wenn Sie jedoch an einer anderen Stelle Ihres Codes in diese Datei schreiben, erhalten Sie eine Ausnahme. Aber kein Stillstand. Wenn Sie Leser und Schreiber auf eine freigegebene Ressource wie eine Datei richtig synchronisieren möchten, können Sie die Klasse ReaderWriterLockSlim verwenden. Wenn Sie niemals in die Datei schreiben (aus demselben Prozess oder einem anderen Prozess), dann geht es Ihnen gut. Aber wenn Sie niemals in die Datei schreiben, sollten Sie diese Datei nicht nur lesen und analysieren, sondern nur einmal und in einer Speicherstruktur zwischenspeichern. Zum Beispiel funktioniert das .NET-Anwendungskonfigurationssystem so. Es liest und analysiert die app/web.config einmal beim Ausführen der Anwendung und speichert sie für einen schnelleren Zugriff im Speicher. Aber natürlich hängt alles von Ihrem genauen Szenario ab.

+1

Wenn Sie darüber hinaus besorgt sind, dass mehrere Personen diese Konfigurationsdatei lesen, sollten Sie sie einmal in einem threadsicheren Bereich lesen und dann für die zukünftige Verwendung zwischenspeichern. – Tejs

+0

@ Tejs, sehr guter Punkt. Ich werde meine Antwort aktualisieren, um sie zu berücksichtigen. –