asp.net - route - ¿Es aceptable mantener abierta una conexión de db durante la vida de la página?
select asp-for asp-items (10)
¿Qué sucede si la página se bloquea antes de llegar al evento Page.Unload? Tendrás una conexión abierta. Para mí, es mejor cerrar siempre la conexión lo antes posible.
Todo el mundo sabe que debes cerrar una conexión inmediatamente después de que termines de usarla.
Debido a un error en el diseño de mi modelo de objetos de dominio, tuve que dejar la conexión abierta para el ciclo de vida completo de la página. Esencialmente, tengo una propiedad Just In Time que abre una conexión en la primera llamada, y luego en la página. Descargar (...) comprobará si alguna vez se abrió una conexión db y luego la cerrará si fuera así. Como solo lleva un segundo, tengo la opinión de que no es demasiado diferente de cerrarlo de inmediato.
¿Esta bien? ¿O debería cerrarse inmediatamente después de cada uso individual?
Gracias por adelantado.
Cada aplicación decente de ASP.NET utiliza la agrupación de conexiones hoy en día, y un grupo es básicamente un conjunto de conexiones abiertas. En su caso, eso significaría que la conexión a la que está retenido está "ocupada" y no puede utilizarse para atender otras solicitudes.
Por lo que veo, sería un problema de escalabilidad dependiendo de la cantidad de tiempo que su página necesita para trabajar / renderizar. Si solo espera 100 usuarios, como usted dice, entonces probablemente no sea un problema, a menos que sea 100 req / seg por supuesto.
Desde la perspectiva tecnológica, está bien. Por lo que recuerdo, la mayoría de las aplicaciones cliente-servidor (web y no web), incluido el clásico código ASP utilizado para trabajar de esa manera, por ejemplo, declaras una conexión para toda la página y trabajas con ella.
No es ideal, pero no volvería a escribir mi solicitud sobre él. A menos que su página esté realizando una gran cantidad de trabajo que requiere mucho tiempo en varios métodos, el ciclo de vida completo de la página debería ejecutarse rápidamente. En la práctica, puede significar que su objeto de conexión está abierto unos milisegundos más de lo que hubiera sido de otra manera. Eso podría ser significativo en algunos escenarios, pero no parece serlo en su caso.
No, no está bien.
Si su aplicación alguna vez necesitará crecer o escalar, querrá solucionar este problema. Al mantener abierta esa conexión, reduces tu capacidad de escalar. Tenga en cuenta que las conexiones abiertas ocupan memoria en el servidor, la memoria en el cliente, mantienen bloqueos abiertos, etc.
Por supuesto, puedes mantenerlos abiertos, pero no no. Ciérrelo después de su uso en los bloques finalmente. Una transacción justa desde "después de cada uso único" es cerrarlo después de cada bloque de uso, si puede ejecutar un proceso almacenado, actualizar una columna y luego eliminar alguna otra fila, puede abrir / cerrar alrededor de esos tres operaciones, suponiendo que están todos envueltos en un try / catch / finally.
Si está bien.
Cerrar la conexión tan pronto como sea posible es una práctica recomendada para evitar conexiones abiertas huérfanas, pero si está seguro de que la conexión está cerca, no hay nada de malo en eso.
página se bloquea? esto es lo que usa y finalmente son para
dicho eso, por el bien del rendimiento de DB (es decir, escalado) * es mejor mantener las conexiones abiertas el menor tiempo posible, permitiendo solo que no se desee abrir cerrar abrir cerrar abrir cerrar para realizar un trabajo rápidamente secuencial y predecible
* Me lo contó un mentor al principio de mi carrera, debo decir que no lo he probado realmente por mí mismo, pero te parece correcto teóricamente
Creo que una mejor pregunta con comentarios mucho más informados y productivos podría proporcionar algunos fragmentos de lo que estás haciendo (código) y ampliar las razones por las que has hecho esta elección. Es muy probable que haya una solución mejor que no requiera mantener la conexión abierta por tanto tiempo, pero al menos, por razones pragmáticas, puede obtener algunos comentarios sobre si vale la pena modernizarla.
En el futuro, definitivamente desea alejarse del acceso a los datos en su código subyacente.
Me parece conveniente mantener la conexión abierta cuando se utiliza ORM ( Abrir sesión en la vista ) para que después de una búsqueda inicial ansiosa, otros datos se puedan cargar de forma perezosa según sea necesario. Esto funciona bien cuando los tiempos de respuesta de la página son razonables para no vincular las conexiones.
Sin duda, debe mantener la conexión abierta durante toda la vida de la página, si realiza múltiples consultas durante la misma. En general, uno reutiliza las conexiones en muchas páginas, en realidad.