sql >> データベース >  >> RDS >> Sqlserver

C#AsyncCTPからExecuteReaderAsyncを使用することの不利な点

    私はこれについてリッカに同意しません。非同期DBコマンドは優れているだけでなく、規模、スループット、およびスループットを達成するために重要です。 レイテンシー。スレッドプールの立ち上げ時間に関する彼の反対意見は、トラフィック量が少ないWebサーバーにのみ当てはまります。

    トラフィックが多い状況(重要なのはこれだけです)では、スレッドプールは新しいスレッドの「注入」を待つ必要はありません。 SQLコマンドを非同期で実行することは、Webサーバーの要求/スレッドの状態の観点からだけでなく、要求の存続期間/待機時間の合計の観点からも重要です。相関のないDB呼び出しは、順次ではなく並列で実行できます。これだけでも、通常、ユーザーが経験するHTTPリクエストのレイテンシが劇的に改善されます。つまり、ページの読み込みが速くなります。

    ただし、アドバイス:非同期処理=true 接続文字列。これは設定されていませんが(デフォルトでは設定されていません。編集:.NETFramework<4.5以降。非同期処理 不要になりました BeginExecuteReader 偽物に過ぎないので、呼び出しはスレッドを起動し、それをブロックします。 スレッド。真の非同期処理が接続文字列で有効になっている場合 その場合、呼び出しは真に非同期であり、コールバックはIO完了に基づいています。

    注意:非同期SQLコマンドは最初のとすぐに完了します 結果はクライアントに返され、情報メッセージは結果としてカウントされます。

    create procedure usp_DetailsTagsGetAllFromApprovedPropsWithCount
    as
    begin
    print 'Hello';
    select complex query;
    end
    

    あなたは非同期のすべての利点を失いました。 print クライアントに送り返される結果を作成します。これにより、非同期コマンドが完了し、クライアントでの実行が再開され、「reader.Read()」が続行されます。今それ 複雑なクエリが結果の生成を開始するまでブロックします。 '誰がprintを置くかを尋ねます 手順で?' しかし、 print 他の何か、おそらく INSERTのように無邪気な何かに偽装されている可能性があります なしで実行する 最初に SET NOCOUNT ONを発行します 。



    1. ループ内でphpmail()関数を使用して+-200通のメールを送信する

    2. vagrantvirtualboxマシンからホストPostgreSQLに接続する方法

    3. OracleのLEAST()関数

    4. テーブルを反復処理し、各行で計算を実行します