2012-04-20 18 views
5

Questo è il mio codice esistente che salvo alcuni dati di più tabelleSqlConnection con la programmazione parallela

using (SqlConnection conn = new SqlConnection("myConnString")) 
{ 
    DoWork1(conn); 
    DoWork2(conc); 
    DoWork3(conn); 
} 

Al fine di accelerare il mio codice in modo cerco di ottenere il sostegno TPL .net e ho rehanged il mio codice, come di seguito

Ma questo mi getta un'eccezione di errore irreversibile di connessione interna dal metodo ExecuteNonQuery() nel mio livello di accesso ai dati. Il mio approccio parallelo è sbagliato?

+0

"Il mio approccio parallelo è sbagliato?" - molto probabilmente. –

risposta

8

Bene, ci sono modi in cui potenzialmente può essere fatto funzionare con MARS - ma vorrei suggerire un approccio diverso. (Non so se MARS supporti l'utilizzo della stessa connessione su più thread, anche se consente più operazioni simultanee.)

Invece di provare a riutilizzare una connessione in tutte le attività parallele, rendere ogni attività aperta (e chiudere) una connessione per se stesso, e lasciare che il pool di connessioni gestisca il lato di efficienza di quello. Questa è la prassi migliore in .NET se stai usando il parallelismo o meno: apri la connessione, fai un po 'di lavoro, chiudi la connessione.

+0

grazie signore per la vostra rapida risposta. Proverò il secondo approccio (aprire e chiudere la connessione una volta per operazione) – Renushi

Problemi correlati