Pregunta

Todo el mundo sabe que debe cerrar una conexión inmediatamente después de que termine de usarla.

Debido a una falla en el diseño de mi modelo de objeto de dominio, tuve que dejar la conexión abierta durante todo el ciclo de vida de la página. Esencialmente, tengo una propiedad Just In Time que abre una conexión en la primera llamada, y luego en Page.Unload (..) verificaría si alguna vez se abrió una conexión db, y luego la cerraría si lo fuera. Como solo lleva un segundo, he tenido la opinión de que no es muy diferente a cerrarlo de inmediato.

¿Está bien? ¿O aún debería cerrarse inmediatamente después de cada uso?

Gracias de antemano.

¿Fue útil?

Solución

No es ideal, pero no volvería a escribir mi aplicación sobre él. A menos que su página esté realizando una gran cantidad de trabajo que requiere mucho tiempo en varios métodos, todo el ciclo de vida de la página debe ejecutarse rápidamente. En la práctica, puede significar que su objeto de conexión está abierto unos pocos milisegundos más de lo que hubiera estado de otra manera. Eso puede ser significativo en algunos escenarios, pero no parece que lo sea en su caso.

Otros consejos

No, no está bien.

Si su aplicación alguna vez necesita crecer o escalarse, querrá solucionar este problema. Al mantener esa conexión abierta, está reduciendo su capacidad de escalar. Tenga en cuenta que las conexiones abiertas ocupan memoria en el servidor, memoria en el cliente, mantienen bloqueos abiertos, etc.

¿Qué sucede si su 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.

Sí, está bien.

Cerrar la conexión lo antes 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.

Cada aplicación ASP.NET decente usa agrupación de conexiones hoy en día, y una agrupación es básicamente un grupo de conexiones abiertas. En su caso, eso significaría que la conexión a la que se está aferrando está "ocupada" y no se puede utilizar para atender otras solicitudes.

Por lo que veo, sería un problema de escalabilidad dependiendo de la cantidad de tiempo que tu página necesita para trabajar / renderizar. Si espera solo 100 usuarios, como usted dice, entonces probablemente no sea un problema, a menos que sean 100 requisitos / segundo, por supuesto.

Desde la perspectiva tecnológica está bien. Hasta donde recuerdo la mayoría de las aplicaciones cliente-servidor (web y no web), incluido el código ASP clásico que solía funcionar así, por ejemplo, declara una conexión para toda la página y trabaja con ella.

página se bloquea? esto es para lo que se usa y, finalmente, para

Dicho esto, en aras del rendimiento de la base de datos (es decir, el escalado) * es mejor mantener las conexiones abiertas el menor tiempo posible, permitiendo solo que no quiera abrir cerrar abrir cerrar abrir cerrar para un trabajo secuencial y predecible rápidamente

* Un mentor me dijo esto al principio de mi carrera, debo decir que en realidad no lo he probado yo mismo, pero en teoría suena bien

Por supuesto que puede mantenerlos abiertos, pero no, no. Ciérrelo después de su uso en finalmente bloques. Una compensación justa de " después de cada uso individual " es cerrarlo después de cada bloque de uso, si es capaz de ejecutar un proceso almacenado, actualizar una columna, luego eliminar alguna otra fila, podría abrir / cerrar alrededor de esas tres operaciones, suponiendo que todas estén envueltas en un intento / captura / finalmente.

Sin duda, debe mantener la conexión abierta durante toda la vida útil de la página, si realiza varias consultas durante la misma. Generalmente, uno reutiliza conexiones en muchas páginas, en realidad.

Creo que una mejor pregunta con comentarios mucho más informados y productivos podría ser proporcionar algunos fragmentos de lo que está haciendo (código) y ampliar las razones por las que ha tomado esta decisión. Es muy probable que haya una mejor solución que no requiera mantener la conexión abierta durante tanto tiempo, pero al menos, por razones pragmáticas, podría obtener algunos comentarios sobre si vale la pena renovarla.

En el futuro, definitivamente desea alejarse del acceso a 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 ansiosa inicial, otros datos se puedan cargar perezosamente según sea necesario. Esto funciona bien cuando los tiempos de respuesta de la página son razonables para no atar las conexiones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top