Creazione di connessioni al database: esegui una sola volta o per ogni query?

86

Al momento creo una connessione al database quando viene caricata per la prima volta la mia pagina web. Quindi elaboro la pagina ed eseguo qualsiasi query contro tale connessione. È questo il modo migliore per farlo o dovrei creare una connessione al database ogni volta che eseguo una query?

p.s Ha più senso per me creare 1 connessione e usarla, ma non so se questo può causare altri problemi.

Sto usando C # (ASP.NET) con MSSQL.

    
posta webnoob 29.03.2012 - 11:40
fonte

2 risposte

103

Se ne crei uno per query / transazione, è molto più semplice gestire "chiudere" le connessioni.

Riesco a capire perché il buonsenso impone di aprirne uno e usarlo ovunque, ma si incontrano problemi con connessioni interrotte e multithreading. Quindi il tuo prossimo passo sarà quello di aprire un pool, ad esempio di 50, connessioni e tenerle tutte aperte, distribuendole in diversi processi. E poi scoprirai che questo è esattamente ciò che fa il framework .NET per te già .

Se apri una connessione quando ne hai bisogno e la smaltisci quando hai finito, in realtà questa non chiuderà la connessione, ma la restituirà al pool di connessioni per essere utilizzata di nuovo.

    
risposta data 29.03.2012 - 11:53
fonte
33

Si consiglia di creare una connessione per query e, nel caso di visualizzazione dei dati, è consigliabile che la query porti in tutti i dati necessari in una volta sola.

Informazioni di base:

In .NET, la chiamata di SqlConnection.Open() per impostazione predefinita utilizza sempre in modo trasparente il pool di connessioni (vedi "Utilizzo del pool di connessioni con SQL Server " su MSDN). Quindi puoi semplicemente prendere una nuova connessione usando Open() e chiamare Close() quando hai finito, e .NET farà la cosa giusta.

Si noti che senza il pooling di connessioni, una connessione per query sarebbe una pessima idea perché la creazione di connessioni di database reali può essere molto costosa (autenticazione, overhead di rete ecc.) e il numero di connessioni aperte simultanee è generalmente molto limitato. / p>     

risposta data 29.03.2012 - 11:44
fonte

Leggi altre domande sui tag