Menciona el rastreo de una posible pérdida de memoria y la palabra "conexión". Voy a adivinar que te refieres a una conexión de base de datos.
SIEMPRE debe envolver todas sus conexiones y comandos en las cláusulas using
. Esto garantizará la conexión/comando se eliminarse adecuadamente independientemente de si se produce un error, desconecta el cliente, etc.
Hay un montón de ejemplos aquí, pero que se reduce a algo como:
using (SqlConnection conn = new SqlConnection(connStr)) {
using (SqlCommand cmd = new SqlCommand(conn)) {
// do something here.
}
}
Si Por alguna razón, su código no le permite hacerlo de esta manera, entonces le sugiero que lo próximo que haga será reestructurarlo como lo hizo incorrectamente. Un problema común es que algunas personas crearán un objeto de conexión en la parte superior de la ejecución de la página y luego lo reutilizarán durante la vida de la página. Esto garantiza problemas, que incluyen pero no se limitan a: errores con el grupo de conexiones, pérdida de memoria, problemas de consultas aleatorias, limpieza completa de la aplicación ...
No se preocupe por el rendimiento con el establecimiento (y descartando) conexiones en el punto que las necesita en el código. Windows usa un grupo de conexiones que es rapidísimo y mantendrá las conexiones por el tiempo que sea necesario, incluso si su aplicación indica que ya está hecho.
También tenga en cuenta: debe usar este patrón CADA VEZ que está utilizando una clase no administrada.Aquellos siempre implementan IDisposable
.
Ese es un buen punto +1. Estoy usando response.flush varias veces en la página. ¿Qué sucede en el servidor descarga pero no hay un cliente? – w0051977