Statico DataTable o DataSet in una classe - cattiva idea?

2

Ho diverse istanze di una classe. Ogni istanza memorizza i dati in un database comune. Quindi, ho pensato "Creerò il DataTable table del campo statico, in questo modo ogni istanza può semplicemente aggiungere / modificare le righe al proprio campo table , ma tutti i dati saranno effettivamente in un unico posto!"

Tuttavia, a quanto pare è una cattiva idea usare i campi statici, specialmente se si tratta di database: Non utilizzare" Statico "in C #?

Questa è una cattiva idea? Avrò problemi in seguito se lo uso?

Questo è un piccolo progetto quindi non posso accettare nessun test come compromesso se questo è l'unico inconveniente. Il vantaggio dell'utilizzo di un database statico è che ci possono essere molti oggetti di tipo MyClass , ma solo una tabella a cui tutti parlano, quindi un campo statico sembra essere un'implementazione esattamente di questo, pur mantenendo sintattica la sintassi.

Non vedo perché non dovrei usare un campo statico (anche se non lo saprei davvero) ma se dovessi farlo, l'alternativa migliore che posso pensare è creare un DataTable e passare un riferimento ad esso durante la creazione di ogni istanza di MyClass , forse come parametro costruttore.

Ma questo è davvero un miglioramento? Sembra meno intuitivo di un campo statico.

    
posta Superbest 05.11.2012 - 12:42
fonte

2 risposte

3

Non otterrai alcun miglioramento se passi un'istanza di DataTable a ogni istanza di MyClass , hai ancora una singola istanza di DataTable a cui ogni oggetto fa riferimento, e userà un po 'di memoria in più perché ogni oggetto avrà quell'istanza a differenza di un campo statico che è un riferimento singolo per la classe hole.

Per la prima vista, non dovresti avere problemi nell'usare questa architettura, i problemi possono sorgere se hai un multithreading e acess concomitanti al DataTable .

    
risposta data 05.11.2012 - 12:51
fonte
2

Leggere DataTable su più thread dovrebbe essere OK. La scrittura no, dovresti sincronizzare l'accesso in scrittura. Vedi "Sicurezza thread" in Documento tabella dati .
Potrebbe essere necessario creare un oggetto separato che si occupa dell'accesso e della sincronizzazione dei dati.

Tuttavia, basti pensare che puoi chiamare lock(table) {//Write here} prima di scrivere i dati in ogni thread.

Ora, non dovresti avere una variabile statica per condividerla tra le istanze, puoi semplicemente impostare ogni thread per fare riferimento alla stessa istanza. Ciò ti darà più flessibilità in futuro (ad esempio: per migliorare le prestazioni in scrittura puoi avere più connessioni e puoi assegnarle dal pool ogni volta che viene creato un nuovo thread)

    
risposta data 05.11.2012 - 19:43
fonte

Leggi altre domande sui tag