Pool di connessioni per il provider di dati .NET Framework per Oracle

Il pool di connessioni consente di aumentare notevolmente le prestazioni e la scalabilità dell'applicazione. Con il provider di dati .NET Framework per Oracle vengono forniti automaticamente pool di connessioni per una propria applicazione client ADO.NET. È possibile inoltre specificare diversi modificatori delle stringhe di connessione per controllare il comportamento del pool. Per informazioni, vedere "Controllo del pool di connessioni con le parole chiave delle stringhe di connessione" più avanti in questa sezione.

Nota   Il provider di dati .NET Framework per Oracle non è incluso in .NET Framework versione 1.0. Se si dispone di .NET Framework versione 1.0 e si desidera utilizzare il provider di dati .NET Framework per Oracle, sarà possibile scaricare quest'ultimo all'indirizzo http://msdn.microsoft.com/downloads/ (informazioni in lingua inglese).

Creazione e assegnazione di pool

Quando viene aperta una connessione, il pool di connessioni viene creato in base a un algoritmo esattamente corrispondente che associa il pool alla stringa di connessione. Ogni pool di connessioni è associato a una stringa di connessione distinta. Quando viene aperta una nuova connessione, se la stringa di connessione non corrisponde esattamente a un pool esistente, viene creato un nuovo pool.

Una volta creati, i pool di connessioni non vengono eliminati fino a quando non termina il processo attivo. La manutenzione di pool inattivi o vuoti implica un minimo overhead del sistema.

Aggiunta di connessioni

Per ogni stringa di connessione univoca viene creato un pool di connessioni. Quando si crea un pool, vengono creati più oggetti connessione che vengono aggiunti al pool in modo da soddisfare il requisito delle dimensioni minime del pool. Le connessioni vengono aggiunte al pool se necessario, fino al raggiungimento delle dimensioni massime del pool.

Quando richiesto, l'oggetto OracleConnection viene ottenuto dal pool se è disponibile una connessione utilizzabile. Per essere utilizzabile, la connessione non deve essere attualmente utilizzata, deve disporre di un contesto di transazione corrispondente oppure non deve essere associata ad alcun contesto di transazione e deve avere un collegamento valido al server.

Se le dimensioni massime del pool sono state raggiunte e non è disponibile alcuna connessione utilizzabile, la richiesta viene messa in coda. Con la funzione di pool delle connessioni questi requisiti vengono soddisfatti grazie alla riallocazione delle connessioni rilasciate nel pool. Le connessioni vengono rilasciate nel pool quando si utilizzano i metodi Close o Dispose sulla Connection.

**Attenzione   **Al termine dell'utilizzo, chiudere sempre la Connection, così da restituire la connessione al pool. È possibile effettuare questa operazione utilizzando il metodo Close o Dispose dell'oggetto Connection. Le connessioni che non vengono chiuse in modo esplicito potrebbero non essere aggiunte o restituite al pool. Una connessione che, ad esempio, esce dall'ambito ma non viene chiusa in modo esplicito, verrà restituita al pool di connessioni solo se è stata raggiunta la dimensione massima del pool e la connessione è ancora valida.

Nota   Non utilizzare i metodi Close o Dispose su Connection, DataReader o altri oggetti gestiti nel metodo Finalize della propria classe. Nei finalizzatori rilasciare solo le risorse non gestite che la classe controlla direttamente. Se la classe non controlla alcuna risorsa non gestita, non includere un metodo Finalize nella definizione della classe. Per ulteriori informazioni, vedere Programmazione coerente con la procedura di garbage collection.

Rimozione della connessione

La funzione di pool delle connessioni rimuove una connessione dal pool se la relativa durata è scaduta o se la funzione di pool rileva che la connessione con il server è stata interrotta. Si noti che questa condizione può essere rilevata solo dopo che si è tentato di comunicare con il server. Se viene individuata una connessione al server che non è più attiva, la connessione viene contrassegnata come non valida. La funzione di pool delle connessioni controlla periodicamente i pool di connessioni alla ricerca di oggetti che sono stati rilasciati nel pool e che sono contrassegnati come non validi. Queste connessioni vengono rimosse in modo permanente.

In presenza di una connessione a un server che non è più disponibile, la connessione può essere recuperata dal pool anche se la funzione di pool delle connessioni non ha rilevato la connessione interrotta e non l'ha contrassegnata come non valida. Quando si verifica questa situazione viene generata un'eccezione. È necessario comunque chiudere la connessione in modo da rilasciarla nel pool.

Supporto di transazioni

Le connessioni vengono recuperate dal pool e assegnate in base al contesto della transazione. Il contesto del thread richiedente e la connessione assegnata devono corrispondere. Pertanto ogni pool di connessioni viene effettivamente suddiviso in connessioni senza alcun contesto di transazione associato e in N suddivisioni, ognuna delle quali contiene connessioni con un particolare contesto di transazione.

Quando viene chiusa, la connessione viene rilasciata nel pool e nell'appropriata suddivisione in base al contesto di transazione. La connessione può quindi essere chiusa senza generare un errore anche se una transazione distribuita è ancora in sospeso. Questo sistema consente di eseguire o interrompere la transazione distribuita in un momento successivo.

Controllo del pool di connessioni con le parole chiave delle stringhe di connessione

La proprietà ConnectionString dell'oggetto OracleConnection supporta le coppie chiave/valore della stringa di connessione, che possono essere utilizzare per regolare il comportamento della logica del pool di connessioni.

Nella tabella seguente sono descritti i valori di ConnectionString che è possibile utilizzare per regolare il comportamento del pool di connessioni.

Nome Valore predefinito Descrizione
Connection Lifetime 0 Quando una connessione viene restituita al pool, l'ora di creazione viene confrontata con l'ora corrente e la connessione viene eliminata se il periodo di tempo, in secondi, è superiore al valore specificato in Connection Lifetime. Si tratta di un comportamento utile nelle configurazioni cluster per forzare il bilanciamento del carico tra un server in esecuzione e un server appena attivato.

Un valore zero (0) imposta il timeout massimo delle connessioni in pool.

Enlist 'true' Se l'impostazione è true, la funzione di pool inserisce automaticamente la connessione nel contesto della transazione corrente del thread di creazione se un contesto di transazione esiste.
Max Pool Size 100 Numero massimo di connessioni consentite nel pool.
Min Pool Size 0 Numero minimo di connessioni gestite nel pool.
Pooling 'true' Se l'impostazione è true, la connessione viene recuperata dal pool appropriato o, se necessario, creata e aggiunta al pool appropriato.

Vedere anche

Connessione a un'origine dati mediante ADO.NET | Utilizzo di provider di dati .NET Framework per accedere ai dati | Classe OracleConnection