2012-07-12 28 views
7

¿Cuál de los siguientes dos métodos tiene un mejor rendimiento?Desechar la conexión o Cerrar la conexión

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

o simplemente:

DB_Connection_s.Close(); 

al final.

¿El primer método hace que el concepto de agrupación sea inútil? Porque si dispongo de la conexión con cada uso, entonces tengo que abrir una nueva conexión cada vez (y no habrá ninguna conexión en el grupo).

+0

Dispose cerrará y limpiará cualquier otro recurso. – Oded

+1

Lo sé, le pregunto si esta actuación es sabia para matar la conexión cada vez y entonces ¿cuál es el beneficio de la pooing? –

+0

porque sé cuando acabo de cerrar la conexión .it permanece en la agrupación y se usa si no estaba activa. –

Respuesta

5

conexiones son liberados de nuevo en la piscina cuando se llama Cerrar o disponer de la conexión ...

fuente = SQL Server Connection Pooling (ADO.NET)

Por lo tanto, eliminar cualquier preocupación acerca de la pérdida de rendimiento causada por perdidas agrupada conexiones.
Desde el punto de vista código de la diferencia debería ser tan mínima que la declaración using se debe utilizar siempre

+0

hmmm, ¿esto significa que si elimino la conexión, permanecerá en el pool. Entonces, cuál es la principal diferencia entre Close() & Dispose() .si ambos devuelven la conexión al grupo. –

+0

Este artículo en [MSDN] (http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/f7d1fc91-2829-4835-9021-63b7353dd481) debate la diferencia entre estos dos métodos. Lee la respuesta de 'BinaryCoder' – Steve

1

Usar Eliminar. Internamente dentro de Dispose, cerrará la conexión para que no tenga que preocuparse, esto se puede verificar fácilmente con Reflector o similar en caso de duda.

En cuanto al rendimiento, yo seguiría con el uso. Windows tiene varias memorias caché habilitadas (sin duda en ODBC) para garantizar que la reutilización puede producirse para solicitudes repetidas a la misma conexión y, por lo tanto, no debería preocuparse por el rendimiento.

+0

Lo sé, le pregunto si esta actuación es sabia para matar la conexión cada vez y entonces ¿cuál es el beneficio de la pooing? –

+0

Lo siento, está mal, actualizando mi respuesta – Ian

7

El patrón using es mejor, ya que la llamada Dispose cierra la conexión de todos modos, pero como extra la conexión se cierra incluso si algo dentro del uso falla. Por ejemplo, una excepción o simplemente un retorno que fuerza a la ejecución del programa a salir del ámbito de uso. Con un uso, no es necesario cerrar explícitamente la conexión, lo que hace que el código sea más legible. Como otro patrón, la conexión debe cerrarse lo antes posible. No existe una desventaja de rendimiento en el cierre/apertura de la conexión con demasiada frecuencia, ya que el grupo de conexiones optimizará la reutilización de la conexión por usted.

+0

hmmm, ¿significa esto que si elimino la conexión, permanecerá en el grupo? –

+1

@just_name, sí, tanto el cierre como la eliminación no hacen la diferencia: una conexión cerrada solo se registra en la agrupación –

+0

y la conexión eliminada también se libera en la agrupación .am i ¿verdad? –

1

A menos que usted va a llamar .Open() de nuevo en algún momento pronto,

utilizar el bloque using(){}.

si se va a utilizar la misma conexión en otro lugar pronto,
llamada .close(); continuación .open() y así sucesivamente ...
mantener su clase implemente IDisposable y disponer de la conexión allí!

Todavía se está tardando en crear el objeto Connection

Cuestiones relacionadas