SET NOCOUNT ON が必須のシナリオがあります。 SqlClient の BeginExecuteXXX メソッドを介してスレッド プールを利用する非同期処理に基づいて高パフォーマンスの中間層を設計する場合、行数に非常に深刻な問題があります。 BeginExecute メソッドは、最初の メソッドが完了するとすぐに完了します。 サーバーから応答パケットが返されます。ただし、EndExecuteXXX が呼び出されると、呼び出しが完了すると、クエリ以外の要求でこれが完了します。各行数応答は応答です。適度に複雑な手順を処理する場合でも、最初の行カウントは 5 ~ 10 ミリ秒で返されますが、呼び出しは 300 ~ 500 ミリ秒で完了します。送信された非同期リクエストを 500 ミリ秒後にコールバックする代わりに、5 ミリ秒後にコールバックし、コールバックは EndExecuteXXX で 495 ミリ秒ブロックします。その結果、非同期呼び出しが途中で完了し、EndExecuteNonQuery 呼び出しでスレッド プールからのスレッドがブロックされます。これにより、ThreadPool が枯渇します。特定のシナリオで SET NOCOUNT ON を追加するだけで、1 秒あたり数百回の呼び出しから 1 秒あたり数千回の呼び出しにスループットが向上する高性能システムを見てきました。
高スケール/高スループットの中間層で非同期呼び出しを処理することが唯一の方法であることを考えると、NOCOUNT はほぼ必須の要件です。