asp.net - simple - events asp net




È accettabile mantenere una connessione db aperta per la vita della pagina? (7)

Certo che puoi tenerli aperti, ma no no. Chiudilo dopo l'uso in blocchi alla fine. Un giusto compromesso tra "dopo ogni singolo utilizzo" è chiuderlo dopo ogni blocco di utilizzo, se si è in grado di eseguire un processo memorizzato, aggiornare una colonna, quindi eliminare qualche altra riga, è possibile aprire / chiudere attorno a questi tre operazioni, presumendo che siano tutte avvolte in un try / catch / finally.

Tutti sanno che è necessario chiudere una connessione subito dopo aver finito di usarla.

A causa di un difetto nella progettazione del mio modello di oggetto di dominio, ho dovuto lasciare la connessione aperta per il ciclo di vita di una pagina intera. Essenzialmente, ho una proprietà Just In Time che apre una connessione alla prima chiamata, e poi su Page.Unload (..) controllerebbe se una connessione db fosse mai stata aperta, e poi la chiudesse se lo fosse. Dato che ci vuole solo un secondo, ho avuto l'opinione che non è troppo diverso dal chiuderlo immediatamente.

Va bene? O dovrebbe ancora essere chiuso immediatamente dopo ogni singolo uso?

Grazie in anticipo.


Cosa succede se la pagina si arresta in modo anomalo prima di raggiungere l'evento Page.Unload? Avrai una connessione aperta. Per me è meglio chiudere sempre la connessione il prima possibile.


Non è l'ideale, ma non scriverò di nuovo la mia domanda. A meno che la tua pagina non lavori in termini di tempo con metodi diversi, l'intero ciclo di vita della pagina dovrebbe essere eseguito rapidamente. In pratica, può solo significare che l'oggetto di connessione è aperto alcuni millisecondi più a lungo di quanto sarebbe stato altrimenti. Questo potrebbe essere significativo in alcuni scenari, ma non sembra che sarebbe nel tuo caso.


Ogni app decente ASP.NET utilizza il pool di connessioni al giorno d'oggi, e un pool è fondamentalmente un mucchio di connessioni aperte. Nel tuo caso ciò significherebbe che la connessione a cui tieni è "occupata" e non può essere utilizzata per servire altre richieste.

Per quanto vedo, sarebbe un problema di scalabilità a seconda della quantità di tempo in cui la tua pagina ha bisogno di lavorare / renderizzare. Se ti aspetti solo 100 utenti, come dici tu, probabilmente non è un problema, a meno che non sia 100 req / sec, naturalmente.

Dal punto di vista tecnologico va bene. Per quanto mi ricordi della maggior parte delle applicazioni client-server (web e non-web), incluso il classico codice ASP usato in questo modo, ad esempio dichiari una connessione per l'intera pagina e lavori con essa.


pagina si blocca? questo è quello che usano e finalmente servono

Detto questo, per le prestazioni del DB (ad esempio il ridimensionamento) * è meglio mantenere le connessioni aperte il più breve possibile, consentendo solo che non si voglia aprire chiudere chiudere chiudere aprire chiudere per un lavoro rapidamente sequenziale e prevedibile

* Mi è stato detto da un mentore all'inizio della mia carriera, devo dire che non l'ho ancora testato personalmente, ma suona teoricamente


Dovresti certamente mantenere la connessione aperta per tutta la durata della pagina, se stai facendo più query durante la stessa. In generale, uno ri-utilizza connessioni su più pagine, in realtà.


Trovo conveniente mantenere la connessione aperta quando si utilizza ORM ( Open Session in View ) in modo che dopo un recupero iniziale di eager, altri dati possano essere caricati pigramente secondo necessità. Funziona bene quando i tempi di risposta delle pagine sono ragionevoli per non legare le connessioni.





page-lifecycle