ci sono scenari in cui SET NOCOUNT ON è obbligatoria. Quando si progetta un mid-level ad alte prestazioni basato sull'elaborazione asincrona sfruttando il pool di thread tramite i metodi BeginExecuteXXX di SqlClient, c'è un problema molto serio con i conteggi delle righe. I metodi BeginExecute vengono completati non appena il pacchetto di risposta viene restituito dal server. Tuttavia, quando viene richiamato un EndExecuteXXX, questo viene completato con richieste non di query al termine della chiamata. Ogni risposta di rowcount è una risposta. Durante l'elaborazione di procedure anche moderatamente complesse, il conteggio della prima riga potrebbe tornare in 5-10 ms, mentre la chiamata viene completata in 300-500 ms. Invece di richiamare la richiesta asincrona inviata dopo 500 ms, richiama dopo 5 ms e quindi i blocchi di callback in EndExecuteXXX per 495 ms. Il risultato è che le chiamate asincrone vengono completate prematuramente e bloccano un thread dal pool di thread nelle chiamate EndExecuteNonQuery. Questo porta alla fame di ThreadPool. Ho visto sistemi ad alte prestazioni migliorare il throughput da centinaia di chiamate al secondo a migliaia di chiamate al secondo semplicemente aggiungendo SET NOCOUNT ON, su scenari specifici.
Dato che per l'elaborazione di livello midle ad alta velocità/alto throughput le chiamate asincrone sono l'unico modo per andare, il NOCOUNT è praticamente un requisito obbligatorio.
fonte
2009-12-16 21:59:09
Link non funziona –