2010-02-15 9 views
5

Qual è lo schema migliore per la creazione di set di dati su thread-safe durante la scrittura?Rendere sicuri i set di dati in C#

Il meglio che posso trovare su google è 'implementare un livello wrapper con blocchi' ma a prima vista questo sembra piuttosto disordinato.

Qualcuno può raccomandare/punto mi nella direzione di una buona soluzione a questo? Sembra probabile che sia un problema che è già stato risolto da qualche parte.

edit: ho anche bisogno di legare il set di dati per una griglia ui, che complica le cose un po '.

+0

spiacenti, i set di dati sono confusi! –

risposta

3

"Implementare un livello wrapper con blocchi" è la strada da percorrere.

Lo strato involucro sarà probabilmente utilizzare il blocco che è specifico per il modo in cui l'applicazione utilizza i set di dati.

Il tentativo di progettare una soluzione generica per una classe complessa come un DataSet è probabilmente destinato al fallimento.

Ad esempio, l'enumerazione delle proprietà generalmente non è thread-safe, quindi è necessario tenere premuto un blocco finché un chiamante enumera una delle numerose proprietà della raccolta (DataSet.Tables, DataTable.Rows, .. .).

1

Dipende davvero, enormemente, dai dati in questione.

Se hai a che fare con i valori interi o tipo di riferimento, il Interlocked class può essere superiore a prendere le serrature. In caso contrario, la sincronizzazione corretta in genere significa la creazione di un blocco interno nella classe.

L'altra alternativa, tuttavia, è quello di rendere i vostri principali set di dati lavorano su tipi immutabili. È quindi possibile lavorare sulle copie in singoli thread e fornire solo la sincronizzazione al punto di sostituire i valori all'interno del set di dati principale. Questo evita i blocchi nelle singole copie per thread.

1

Implementare uno strato wrapper con blocchi. Sul serio. Non è possibile creare una sottoclasse dei metodi più importanti, quindi finché sono disponibili, la sicurezza del thread può essere interrotta.

Beh, si può anche implementare una serie di metodi di estensione thread-safe e bastone a quelli, ma che funziona solo se non si dispone di passare il DataSet a una libreria di terze parti che accedervi direttamente.

Problemi correlati