2012-07-06 19 views
5

He estado trabajando en una aplicación web en ASP.net. Mi aplicación tiene varias páginas y todas ellas necesitan mostrar tablas que están pobladas por una base de datos. En este momento, lo que estoy haciendo es, en cada página, abrir una conexión de base de datos, ejecutar la consulta específica a esa página y cerrar la conexión de db. Así que esto sucede cada vez que el usuario hace clic en un enlace para ir a una página nueva o hace clic en un control de formulario como la página de la cuadrícula.¿Buenas prácticas para abrir/cerrar conexiones en una aplicación asp.net?

Me preguntaba si esto fue un desastre desde el punto de vista del rendimiento. ¿Hay alguna forma mejor de hacer esto?

+0

Si usa odp.net, el comportamiento predeterminado es usar la agrupación de conexiones, consulte http://docs.oracle.com/html/E10927_01/featConnecting.htm#i1006393 – tbone

Respuesta

9

Casi universalmente, las conexiones de la base de datos deben manejarse de la siguiente manera: abrir lo más tarde posible y cerrar lo antes posible. Abrir y cerrar para consultas/actualizaciones múltiples ... no piense que dejarlo abierto le ahorra cualquier cosa. Debido a que la agrupación de conexiones generalmente hace un muy buen trabajo para administrar las conexiones.

Está perfectamente bien tener un par/pocas conexiones abiertas/cerradas en la producción de una sola página. Intentar mantener abierta una sola conexión entre visitas a la página sería bastante malo ... no lo haga bajo ninguna circunstancia.

Básicamente, con la agrupación de conexiones (habilitada de manera predeterminada para casi todos los proveedores), "cerrar" una conexión realmente solo la libera de nuevo al grupo para ser reutilizada. Tratando de mantenerlo abierto usted atará conexiones valiosas.

3

Así es exactamente como quiere que sea. Una conexión a la base de datos solo debe abrirse cuando sea necesario y cerrarse inmediatamente después del uso.

Lo que es posible que desee ver, especialmente si el rendimiento es un gran problema para usted, es caching. Es posible que desee almacenar en caché toda la página, o solo partes de una página, o solo los datos que desea mostrar en sus páginas. Se ahorrará una gran cantidad de base de datos de viajes de esta manera, pero habría que considerar ahora otras cosas como cuándo actualizar la memoria caché, la memoria caché para los diferentes usuarios, etc.

3

De MSDN - Best Practices in ADO.Net

Aplicaciones de alto rendimiento mantienen las conexiones a la fuente de datos en se usan durante un período de tiempo mínimo, así como también se aprovecha la tecnología de mejora del rendimiento , como la agrupación de conexiones.

Lo que está haciendo está perfectamente bien, abrir la conexión para ejecutar la consulta y luego cerrarla después. Si mantiene la conexión por un período de tiempo más largo, y hay varias personas accediendo a su aplicación, entonces hay posibilidades de que se le acabe el límite de conexión generalmente establecido en una base de datos.

2

Unir las conexiones de base de datos al código de servidor es una mala práctica. Como está aprendiendo, le sugiero que use los servicios web para interactuar con la interfaz de usuario en lugar de vincular sus interacciones de datos con la interfaz de usuario.

Al igual que la interfaz de usuario (página ASPX) >> BLL (la lógica de negocios Layer) >> DAL (acceso capa de datos)

también tratar de usar la palabra clave 'usando' en DAL y disponer las conexiones y todo después de la interacción DB

+0

¿Sería tan amable de especificar explícitamente qué temas debo hacer? más leyendo? –

Cuestiones relacionadas