Domanda

Tutti sanno che dovresti 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 l'intero ciclo di vita della pagina. In sostanza, ho una proprietà Just In Time che apre una connessione alla prima chiamata, quindi su Page.Unload (..) verificherebbe se una connessione db è mai stata aperta, e poi la chiude se lo fosse. Dato che ci vuole solo un secondo, ho avuto l'opinione che non fosse troppo diverso dalla sua chiusura immediata.

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

Grazie in anticipo.

È stato utile?

Soluzione

Non è l'ideale ma non riscriverei la mia applicazione su di esso. A meno che la tua pagina non lavori molto tempo in vari modi, l'intero ciclo di vita della pagina dovrebbe essere eseguito rapidamente. In pratica, ciò potrebbe significare solo che l'oggetto di connessione è aperto per alcuni millisecondi più a lungo di quanto non sarebbe stato altrimenti. Ciò potrebbe essere significativo in alcuni scenari, ma non sembra come nel tuo caso.

Altri suggerimenti

No, non è OK.

Se la tua applicazione dovrà mai crescere o ridimensionarsi, ti consigliamo di risolvere questo problema. Tenendo aperta quella connessione si riduce la capacità di ridimensionamento. Tenere presente che le connessioni aperte occupano memoria sul server, memoria sul client, blocco aperto, ecc.

Cosa succede se la tua 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.

Sì, è ok.

Chiudere la connessione il prima possibile è una buona pratica per prevenire connessioni aperte orfane, ma se si è sicuri che la connessione sia chiusa, non c'è nulla di sbagliato in questo.

Al giorno d'oggi ogni app ASP.NET decente utilizza il pool di connessioni e un pool è sostanzialmente un gruppo di connessioni aperte. Nel tuo caso ciò significherebbe che la connessione a cui ti stai aggrappando è "occupata". e non può essere utilizzato per soddisfare altre richieste.

A mio avviso, si tratterebbe di un problema di scalabilità a seconda del tempo necessario alla pagina per funzionare / renderizzare. Se ti aspetti solo 100 utenti, come dici tu, probabilmente non è un problema, a meno che non sia 100 req / sec ovviamente.

Dal punto di vista tecnologico è OK. Per quanto mi ricordo la maggior parte delle applicazioni client-server (web e non web), incluso il classico codice ASP usato per funzionare in quel modo, ad esempio dichiari una connessione per l'intera pagina e lavori con essa.

la pagina si arresta in modo anomalo? questo è ciò che sta usando e finalmente sono

Detto questo, per motivi di prestazioni del DB (ad es. ridimensionamento) * è meglio mantenere le connessioni aperte il più breve tempo possibile consentendo solo che non si desideri aprire chiudi apertura chiudi chiudi per un lavoro rapidamente sequenziale e prevedibile

* Mi è stato detto da un mentore all'inizio della mia carriera, devo dire che in realtà non l'ho provato da solo, ma teoricamente suona bene

Naturalmente puoi tenerli aperti, ma no no. Chiudilo dopo l'uso in blocchi finalmente. Un commercio equo e solidale da " dopo ogni singolo utilizzo " è chiuderlo dopo ogni blocco di utilizzo, se si è in grado di eseguire un proc memorizzato, aggiornare una colonna, quindi eliminare qualche altra riga, è possibile aprire / chiudere queste tre operazioni, presumendo che siano tutte racchiuse in una prova / catch / finally.

Dovresti sicuramente mantenere la connessione aperta per tutta la durata della pagina, se stai facendo più query durante. In generale, si riutilizza le connessioni su più pagine, in realtà.

Penso che una domanda migliore con un feedback molto più informato e produttivo potrebbe fornire alcuni frammenti di ciò che stai facendo (codice) e ampliare i motivi per cui hai fatto questa scelta. Probabilmente esiste una soluzione migliore che non richiede di mantenere la connessione aperta così a lungo, ma almeno, per ragioni pragmatiche, potresti ricevere un feedback sul fatto che valga la pena rinnovare.

In futuro, vorrai sicuramente abbandonare l'accesso ai dati nel tuo codice.

Trovo conveniente mantenere aperta la connessione quando si utilizza ORM ( Apri sessione in vista ) in modo che dopo un recupero iniziale desideroso, altri dati possano essere caricati pigramente secondo necessità. Funziona bene quando i tempi di risposta della pagina sono ragionevoli per non legare le connessioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top