Domanda

Attualmente utilizzo un DataTable per ottenere risultati da un database che posso utilizzare nel mio codice.

Tuttavia, molti esempi sul Web mostrano invece l'utilizzo di un DataSet e l'accesso alle tabelle tramite il metodo delle raccolte.

Esiste qualche vantaggio, in termini di prestazioni o meno, nell'utilizzare DataSet o DataTable come metodo di archiviazione per i risultati SQL?

È stato utile?

Soluzione

Dipende davvero dal tipo di dati che stai riportando.Poiché un DataSet è (in effetti) solo una raccolta di oggetti DataTable, è possibile restituire più set distinti di dati in un unico oggetto, e quindi più gestibile.

Dal punto di vista delle prestazioni, è più probabile che si ottenga inefficienza da query non ottimizzate che dalla scelta "sbagliata" del costrutto .NET.Almeno, questa è stata la mia esperienza.

Altri suggerimenti

Una delle differenze principali è che i DataSet possono contenere più tabelle ed è possibile definire relazioni tra tali tabelle.

Se restituisci solo un singolo set di risultati, penso che un DataTable sarebbe più ottimizzato.Penserei che ci debba essere un sovraccarico (concesso piccolo) per offrire la funzionalità di un DataSet e tenere traccia di più DataTable.

in 1.x c'erano cose che DataTables non poteva fare e che DataSets poteva fare (non ricordo esattamente cosa).Tutto ciò è stato cambiato nella 2.x.La mia ipotesi è che questo sia il motivo per cui molti esempi utilizzano ancora DataSet.I DataTable dovrebbero essere più veloci poiché sono più leggeri.Se stai ottenendo un solo set di risultati, è la scelta migliore tra i due.

Una caratteristica del DataSet è che se è possibile chiamare più istruzioni select nelle procedure memorizzate, il DataSet avrà un DataTable per ciascuna.

Sono disponibili alcune ottimizzazioni che è possibile utilizzare durante il riempimento di un DataTable, ad esempio la chiamata a BeginLoadData(), l'inserimento dei dati e quindi la chiamata a EndLoadData().Ciò disattiva alcuni comportamenti interni all'interno di DataTable, come la manutenzione dell'indice, ecc.Vedere Questo articolo per ulteriori dettagli.

Quando hai comunque a che fare con una sola tabella, la più grande differenza pratica che ho riscontrato è che DataSet ha un metodo "HasChanges" ma DataTable no.Entrambi hanno comunque un "GetChanges", quindi puoi usarlo e testare null.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top