2010-02-15 12 views
5

Was ist das beste Muster, um Datasets beim Schreiben threadsafe zu machen?Datensätze in C# sicher machen #

Das beste, was ich durch googlen finden kann ist 'implementieren eine Wrapper-Schicht mit Schlössern' aber auf den ersten Blick scheint das eher chaotisch.

Kann mir jemand empfehlen/weisen in Richtung einer guten Lösung dazu? Es scheint wahrscheinlich ein Problem zu sein, das bereits irgendwo gelöst wurde.

edit: Ich muss auch das Dataset an ein Ui-Gitter binden, was die Sache etwas komplizierter macht.

+0

Entschuldigung, Datensätze sind unordentlich! –

Antwort

3

"Implementieren Sie eine Wrapper-Layer mit Sperren" ist der Weg zu gehen.

Die Wrapper-Schicht verwendet wahrscheinlich eine Sperrung, die spezifisch für die Art ist, wie Ihre Anwendung die DataSets verwendet.

Der Versuch, eine generische Lösung für eine so komplexe Klasse wie ein DataSet zu entwerfen, ist wahrscheinlich zum Scheitern verurteilt.

Zum Beispiel sind Aufzählungseigenschaften im Allgemeinen nicht Thread-sicher - Sie müssen also eine Sperre halten, solange ein Aufrufer eine der vielen Auflistungseigenschaften (DataSet.Tables, DataTable.Rows, ..) auflistet. .).

1

Es hängt wirklich sehr stark von den fraglichen Daten ab.

Wenn Sie mit Integer- oder Referenzwerten arbeiten, kann die Interlocked class der Verwendung von Sperren überlegen sein. Andernfalls bedeutet erfolgreiche Synchronisation in der Regel das Erstellen von Sperren in der Klasse.

Die andere Alternative ist jedoch, Ihre Hauptdatensätze auf unveränderlichen Typen arbeiten zu lassen. Sie können dann nur an Kopien in einzelnen Threads arbeiten und nur dann eine Synchronisierung bereitstellen, wenn Werte innerhalb des Hauptdatensatzes ersetzt werden sollen. Dies verhindert Sperren in den einzelnen Kopien pro Thread.

1

Implementieren Sie eine Wrapper-Schicht mit Sperren. Ernst. Sie können die wichtigen Methoden nicht ableiten, so lange sie verfügbar sind, kann Ihre Thread-Sicherheit unterbrochen werden.

Nun, Sie können auch eine Reihe von threadsicheren Erweiterungsmethoden implementieren und dabei bleiben, aber das funktioniert nur, wenn Sie das DataSet nicht an eine Bibliothek eines Drittanbieters weitergeben müssen, die direkt darauf zugreift.