2012-07-12 20 views
7

Quale dei seguenti due metodi ha prestazioni migliori?Smaltire la connessione o Chiudere la connessione

using(var DB_Connection_s = new DBConnection()) 
{ 
//todo: interact with database connection 
} 

o semplicemente:

DB_Connection_s.Close(); 

alla fine.

Il primo metodo rende inutile il concetto di raggruppamento? Perché se dispongo la connessione con ogni utilizzo, allora devo aprire una nuova connessione ogni volta (e non ci saranno connessioni nel pool).

+0

Dispose chiuderà e ripulirà qualsiasi altra risorsa. – Oded

+1

Lo so, chiedo è questa prestazione saggia per uccidere la connessione ogni volta e poi qual è il vantaggio di cacca ?! –

+0

perché so quando chiudo la connessione. Rimane nel pool e viene utilizzato se non era attivo. –

risposta

5

connessioni vengono rilasciati nuovamente dentro lo stagno quando si chiama Chiudi o Dispose su Connection ...

source = SQL Server Connection Pooling (ADO.NET)

Quindi, rimuovere alcuna preoccupazione circa la perdita di prestazioni causati da mancati pool connessioni.
Dal codice punto di vista la differenza dovrebbe essere talmente minima che l'istruzione using deve essere sempre utilizzato

+0

hmmm, questo significa che se dispongo la connessione, rimarrà nella piscina. Quindi qual è la differenza principale tra Close() & Dispose(). Se entrambi restituiscono la connessione al pool. –

+0

Questo articolo su [MSDN] (http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/f7d1fc91-2829-4835-9021-63b7353dd481) discute la differenza tra questi due metodi. Leggi la risposta da 'BinaryCoder' – Steve

1

Utilizzare Dispose. All'interno di Dispose chiuderà la connessione in modo da non doverti preoccupare, questo può essere controllato abbastanza facilmente con Reflector o simili in caso di dubbio.

Per quanto riguarda le prestazioni vorrei ancora andare con l'utilizzo. Windows ha varie cache abilitate (certamente in ODBC) per garantire che il riutilizzo possa verificarsi per richieste ripetute alla stessa connessione e quindi non dovresti davvero preoccuparti delle prestazioni.

+0

Lo so, chiedo è questa prestazione saggia per uccidere la connessione ogni volta e poi qual è il vantaggio di cacca ?! –

+0

Mi dispiace, il mio male, aggiornando la mia risposta – Ian

7

Il modello using è migliore, poiché la chiamata di Dispose chiude comunque la connessione, ma come bonus la connessione viene chiusa anche se qualcosa all'interno dell'utilizzo va male. Ad esempio un'eccezione o solo un ritorno che forza l'esecuzione del programma a uscire dall'ambito di utilizzo. Con un utilizzo, non è necessario chiudere esplicitamente la connessione, il che rende il codice più leggibile. Come un altro modello, la connessione deve essere chiusa il prima possibile. Non c'è alcun svantaggio delle prestazioni nel chiudere/aprire la connessione troppo frequentemente, perché il pool di connessioni ottimizzerà la connessione che si ri-usa per te.

+0

hmmm, significa che se dispongo la connessione, rimarrà nel pool. –

+1

@just_name, sì, sia la chiusura che lo smaltimento non fanno differenza: una connessione chiusa viene appena aggiornata al pool –

+0

e la connessione disponibile viene rilasciata anche al pool .am i right? –

1

A meno che non hai intenzione di chiamare .Open() di nuovo a volte presto,

utilizzare il blocco using(){}.

Se avete intenzione di utilizzare la stessa connessione da qualche altra parte presto,
chiamata .close(); poi .open() e così via ...
mantenere la classe di implementare IDisposable e smaltire la connessione lì!

ci vuole ancora tempo per creare l'oggetto Connection