Se si ar esecuzione il lettore in un ciclo, in cui viene eseguito molte volte, quindi assicurarsi che si sta utilizzando CommandBehavior.CloseConnection
SqlCommand cmd = new SqlCommand();
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Se non lo fai, ogni volta che il ciclo elabora i linea, quando termina e l'rdr e l'oggetto di connessione escono dall'ambito, l'oggetto di connessione non verrà chiuso in modo esplicito, quindi verrà solo chiuso e rilasciato al pool quando Garbage Collector finalmente riuscirà a finalizzarlo ...
Quindi, se il loop è abbastanza veloce, (che è molto probabile), si esauriranno le connessioni. (Il pool ha un limite massimo che può generare)
Ciò causerà latenza e ritardi aggiuntivi poiché il codice continua a creare connessioni aggiuntive non necessarie (fino al massimo) e attende che il GC "rilevi" con il ciclo li sta utilizzando ...
fonte
2009-03-19 17:13:40
Puoi pubblicare del codice? –
Il profiler di query Sql rivela qualche suggerimento sul problema? –
EJB: il codice non è stato pubblicato. Il problema è lo stesso anche se usiamo il comando di puro comando Execute (disponibile nell'aiuto di MS) – Maciej