2012-10-30 3 views
7

Continuo a leggere che SqlDataReaders è molto più veloce di SqlDataAdapters a causa della loro natura di collegamento veloce, di sola lettura, con una sola riga alla volta e che sono specificamente più veloci di SqlDataAdapters quando compilano un oggetto DataTable (SqlDataAdapter.Fill (dataTable)).Se SqlDataAdapter utilizza internamente un lettore di dati, perché la gente dice che l'uso di un SqlDataReader è più veloce?

Tuttavia, qui e là qualcuno dirà "probabilmente non farà la differenza quello che si utilizza perché SqlDataAdapter utilizza un lettore di dati internamente per riempire la sua tabella." Se questo è vero, con quale precisione l'adattatore può essere molto più lento se comunica con il database utilizzando comunque un lettore di dati interno?

So che potrei impostare alcuni test e profilare le prestazioni di ciascuno, ma quello che mi piacerebbe davvero è che qualcuno faccia chiarezza sulle presunte discrepanze nelle prestazioni se si tratta essenzialmente dello stesso processo modo.

Capisco che in genere utilizzi un lettore per creare un elenco di POCO fortemente tipizzati a differenza dell'adattatore dati che riempie semplicemente un tavolo. Tuttavia, la mia domanda riguarda strettamente i dettagli della differenza di prestazioni tra i due e non i problemi O/RM ...

risposta

5

Se si sta utilizzando un DataReader, è possibile reagire ad alcune informazioni durante la lettura della prima riga e persino ignorare il resto della lettura.

Se si utilizza un DataAdapter, è necessario prima caricare l'intera tabella e quindi leggere la prima riga per rispondere alle stesse informazioni.

+0

debitamente indicato, ma cosa succede se non devo controllare ogni riga per qualche condizione? In altre parole, cosa succede se mi interessa solo recuperare un intero sottoinsieme di record per dire che popolano un GridView? – bglee

+1

@ bglee Dovrai localizzare la tua fonte per il motivo per cui pensi che un DataReader sia più veloce di un DataAdapter * in tutte le circostanze *. Sono solo diversi strumenti per accedere ai dati. DataAdapters sono oggetti più pesanti perché possono fare molte più cose con i dati, come l'aggiornamento, l'eliminazione, ecc. – LarsTech