2013-01-14 5 views
5

Ho letto la domanda this relativa allo smaltimento delle connessioni SQL.Chiudere(), ma non eliminare() Connessione SQL - effetti

La mia domanda è: quanto è grave chiudere semplicemente una connessione SQL, ma non eliminarla? Abbiamo una funzione che è semplicemente chiusa, ma mai disposta, ed è usata 1000 volte al giorno. È meglio chiuderlo semplicemente, o sarebbe meglio chiuderlo e smaltirlo?

Sono consapevole che dispose() chiude anche la connessione, tuttavia vorrei sapere perché chiudere non dispone della connessione.

+1

Quanto è difficile racchiudere ogni connessione con un'istruzione 'using'? L'ho fatto un'abitudine e la uso ovunque. – mellamokb

+0

'.Close' probabilmente non dispone della connessione perché è possibile richiamare facilmente' .Open' per riaprire la connessione. – mellamokb

+0

@mellamokb. Dato che il pooling è attivo, è possibile creare facilmente la connessione nuovamente e correttamente. Il pool non lo smaltirà fino a quando non sarà inattivo per 2 minuti (predefinito) –

risposta

4

L'importante delle connessioni è chiuderle in modo che vengano restituite al pool di connessioni.

Come tale, c'è poca differenza tra lo smaltimento e la chiusura di una connessione, a condizione che si sia disciplinati sulla chiusura e sul riutilizzo delle connessioni.

Tuttavia, l'abitudine di avvolgere la creazione di una connessione in un'istruzione using significa che non si dimentica mai di chiuderla.

È un buon esempio da seguire: la creazione di qualsiasi oggetto che implementa IDisposable deve essere racchiusa in un'istruzione using e, in quanto tale, è buona per seguire anche le connessioni.

0

A seconda se va fuori dal campo di applicazione o meno. Se lo fa verrà comunque chiuso e restituito il pool di connessione (dato che non l'hai disabilitato). Quindi chiamare in modo implicito o esplicito come si sta facendo rende chiaro il tuo intento e rende questa connessione "istantaneamente" disponibile per il riutilizzo nel pool.

L'idea era di convincere gli sviluppatori a entrare e uscire dal db veloce. Un sacco di piccole transazioni. Non il vecchio stile apre una connessione e poi la nasconde in modo che nessun altro possa raggiungerla, nel caso in cui fosse necessario nuovamente.

Se il pool di connessioni è nella clausola a using equivale a Create, open, Close. Se è spento, una clausola using equivale a creare, aprire, chiudere, Dispose.

In entrambi gli scenari, il vero affare è assicurarsi che vada fuori campo. A parte rarissime circostanze, la connessione dovrebbe essere un riferimento locale e avere una durata di questo particolare uso. Generalmente non si crea un'istanza in fase di esecuzione e si rende una proprietà della propria mainform per intance.