Domanda

Sto lavorando su un programma .NET che esegue gli script arbitrari nei confronti di un database.

Quando un colleage iniziato a scrivere il codice di accesso al database, ha semplicemente esposto un oggetto di comando al resto dell'applicazione che viene riutilizzato (impostazione CommandText / Type, chiamando ExecuteNonQuery() etc.) per ogni istruzione.

immagino che questo è un grande successo per le prestazioni ripetute dichiarazioni identiche, perché sono analizzati di nuovo ogni volta.

Quello che mi chiedo circa, però, è: sarà questo anche degradare la velocità di esecuzione se ogni affermazione è diversa da quella precedente (non solo i parametri diversi, ma una dichiarazione del tutto diverso)? Non ho potuto facilmente trovare una risposta su che in documentazione.

A proposito, il RDBMS utilizzato è Oracle, ma credo che questa domanda non è veramente specifico database.

P.S. So esponendo lo stesso oggetto Command non è thread-safe, ma non è un problema qui.

È stato utile?

Soluzione

È certo overhead coinvolti nella creazione di nuovi oggetti comando, e così in alcune circostanze può avere senso di riutilizzare lo stesso comando. Ma, come il caso generale forzata per un'intera applicazione sembra più che un po 'strano.

Altri suggerimenti

La performance ha colpito di solito proviene da stabilire una connessione al database, ma ADO.NET crea un pool di connessioni per aiutare qui.

Se si vuole evitare dichiarazioni di analisi ogni volta di nuovo, li si può mettere in stored procedure.

immagino tuo collega utilizza solo qualche vecchio approccio stile che ha ereditato da lavorare su altre piattaforme in cui il riutilizzo di un oggetto comando ha fatto la differenza.

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