No estoy seguro de cuál es el contexto en el que utiliza sus conexiones, pero puedo compartir lo que parece funcionar para mí.
Uso el servidor SQL como mi back-end y uso una combinación de almacenamiento en caché para obtener un mejor rendimiento. Mi práctica es mantener la conexión abierta solo si realmente la necesito y no agrupar conexiones para que se puedan limpiar de inmediato y puedo ver en el Monitor de actividad de SQL exactamente qué está activo y qué no. Cada conexión ocupa memoria, así que es agradable mantenerla en un rugido sordo cuando no se necesitan.
Antes de responder a la pregunta de apertura y cierre de la conexión, permítanme decir que el almacenamiento en caché es realmente importante. Obtener un objeto de la memoria caché le ahorrará un montón de tiempo. En algunas de mis aplicaciones asp.net cuando el almacenamiento en caché está en desarrollo, he descubierto que apenas puedo medir la latencia, mientras que con una llamada al DB puede llevar de 15ms a 45ms completar la llamada y esto ni siquiera está considerando otra latencia factores o carga. El otro método que uso es una buena estructura de objetos para mis datos, de modo que solo realizo una actualización de DB si algo cambia. Implementé algunos métodos en mi objeto o me aseguro de estar haciendo tan poco IO como sea posible.
Una vez dicho esto, todos sabemos que tenemos que acceder y escribir en nuestra base de datos en algún momento, así que seguir dos principios:
mantener las puertas y ventanas cerradas para ahorrar energía. Una conexión abierta en un lugar significa que no está disponible en otro (o la memoria y otros recursos son más limitados).Hemos desactivado la agrupación porque ha resultado en un mejor rendimiento para nosotros.
Hago tanto en lote como a la vez cuando puedo cuando la conexión está abierta. Esto es un poco más complicado, así que déjame explicarte.
- Un método que he usado es pasar mis objetos de conexión por la tubería para que todos los objetos puedan usar un objeto de conexión. Esto da como resultado que una conexión se abra y se cierre en lugar de tal vez 10 o más según su aplicación. Un buen ejemplo de esto es uno de nuestros modelos de compras que aprovecha el poder del servidor SQL para recopilar estadísticas y organizar patrones de pedidos complicados. No tiene sentido seguir abriendo y cerrando la conexión cuando estás haciendo una búsqueda de 200K + DB o para lo que sean las aplicaciones. La otra parte de esto es que cuando uso el objeto intento agrupar mis actualizaciones para reducir el tiempo que mantengo la conexión abierta. Así que al hacer una scope_identity en la llamada de inserción, vamos a ocuparme tanto de mi inserción como de la búsqueda de la ID única para agregar a mi objeto antes de almacenarlo en la memoria caché. Antes, cuando comencé a desarrollar aplicaciones asp, abría la conexión tan pronto como la página comenzaba a cargarse y luego la cerraba. No recomiendo hacer eso nunca más. Ahora, un día, hay un gran beneficio para este tipo de abstracciones y capas que recomendaría a cualquier programador novato que preste especial atención.
Mis dos centavos:
caché de sus datos! ¡Guarde sus datos en caché! ¡Guarde sus datos en caché! ¡Haga tan poco acceso a la base de datos como sea posible cuando no pueda almacenar en caché y luego almacenar en caché sus datos!