2010-08-11 17 views
10

En una aplicación C#, ¿se debería crear OleDBConnection una vez, o cada vez que se ejecuta una instrucción SQL?En una aplicación C#, ¿debería crearse una conexión de base de datos una vez o cada vez que se ejecuta una instrucción SQL?

Estoy mirando el código C# escrito por otra persona. Cada instrucción SQL va precedida de la creación de un objeto OleDbConnection cuya cadena de conexión apunta a una base de datos MDB.

Es apropiado crear un objeto OleDbConnection cada vez, o debe crearse el objeto al inicio de la aplicación y utilizarse a partir de ese momento.

+1

Qué tipo de aplicación (Formularios, ASP.NET, etc.) y qué tipo de arquitectura (SOA, etc.) está utilizando, según David, dependerá. – StuartLC

Respuesta

3

Depende de la situación.

Si usted va a ser la ejecución de varias declaraciones en una fila, entonces es mejor en cuanto al rendimiento de abrir una vez, ejecutar todas las declaraciones, y luego cerrarla,

Si eres preguntando por la apertura de la conexión cuando el programa se inicia y manteniéndola abierta hasta que el programa se cierra independientemente de lo que esté sucediendo, entonces no. Ciérrela tan pronto como haya terminado con ella. Es mejor no dejar una conexión abierta.

Otro factor en el que la gente nunca parece pensar es en el programador de mantenimiento, que tiene que rastrear el código y realizar un seguimiento de dónde se abre la conexión y cuándo se cierra. Digamos, por ejemplo, que tiene un programa que accede a una base de datos, luego se divide en varias otras funciones, cada una de las cuales puede necesitar la conexión. Seguir esas cosas en código es una pesadilla.

Por otra parte, este factor es secundario a la operación y el rendimiento adecuados, pero aún debe tenerse en cuenta en una aplicación compleja.

El factor principal es cómo afectará el rendimiento frente a la ventaja de mantener una conexión abierta. Debes decidir eso en cada situación.

0

Debe abrir una conexión cada vez que necesite algo de la base de datos y luego cerrarla. Deje el grupo de conexiones para decidir cuándo cerrar físicamente la conexión.

7

Según Best Practices for Using ADO.NET:

Aplicaciones de alto rendimiento mantienen conexiones a la fuente de datos en uso por una cantidad mínima de tiempo, así como tomar ventaja de rendimiento mejora de la tecnología, como la puesta en común conexión ...

6

Suponiendo que la agrupación de conexiones está disponible para su base de datos, que es probable que desee abrir y cerrar una conexión ción para cada llamada a su base de datos. Esto le permite usar solo el recurso finito de una conexión de base de datos solo cuando lo necesite y luego devolverlo al grupo para que otros usuarios lo usen tan pronto como termine de hacer la llamada. Si se aferra a la conexión, pronto se quedará sin recursos finitos, que son las conexiones disponibles totales a la base de datos y, por lo tanto, obstaculizarán gravemente la escalabilidad y el rendimiento de su aplicación.

normalmente utilizo un comunicado su uso para asegurar la conexión está cerca después de su uso - ver más abajo:

using (ODBCConnection c = new ODBCConnection(ConnectionString)) 
    { 
    c.Command.CommandType = CommandType.Text; 
    // make a call 
    } 

Enjoy!

1

Su conexión a la base de datos solo debe estar abierta mientras realiza la actividad directamente en la base de datos. Mantener una conexión abierta a la base de datos mientras la aplicación está realizando otra actividad puede impedir que otros usuarios accedan a la base de datos una vez que su grupo de conexiones alcance su límite.

Si tiene una función intensiva de CPU para realizar en la PC del cliente, entonces debe realizar esta tarea una vez que haya cerrado su conexión para que no se trabe la conexión.

Pero si tiene una serie de funciones de base de datos para realizar, el rendimiento de su cliente se puede mejorar haciendo esto juntos en una única conexión abierta.

Cuestiones relacionadas