SQL に ORDER BY 句があることに注意しながら、これを分析してみましょう:-
do until rs.eof response.flush counter = counter + 1 ' A LOT of calculations and putting in array... rs.movenext loop
プレ>
Response.Flush
に注意してください 、私が最初にすることは、それを取り除くことです。おそらく、(IIS マネージャーで) ASP 応答のバッファリング制限を増やす必要があります。 Flush は、これまでに生成されたコンテンツをクライアントに送信しています。送信されたすべてのパケットの受信をクライアントが確認するのを待ってから、完了します。ここで、5 分以上の 90% が費やされていると推測します。今「たくさんの計算」。 VBScript のパフォーマンスは不明です。このコードには時間がかかる場合があります。場合によっては、一部の計算はスクリプトよりも SQL の方がはるかに優れているため、これは 1 つのオプションです。もう 1 つの方法は、複雑な作業を行うために COM でコンパイルされたコンポーネントを構築することです (ただし、マーシャリングのためにいくつかのアカウンティングが必要になるため、利点が失われる可能性があります)。ただし、これらの計算を VBScript で行う必要があることは避けられない場合があります。
今
rs.movenext
.このループは、処理が必要なほとんどの時間、接続と行セットを開いたままにしておくことを意味します。つまり、サーバーがネットワークを介してクライアントにバイトを送信している間、および VBScript が数値を処理している間です。はるかに優れたアプローチは、すべての行セットをすばやく吸い上げて DB から切断することです。 数を処理し、最後に バッファをクライアントにダンプします。切断されたレコードセット (クライアント側の静的カーソルを指定) または単純な
GetRows
の使用を検討してください 行セット全体を 2 次元配列にダンプするレコードセット オブジェクトのメソッド。これは、可能な限り短い時間でさまざまなテーブルのロックを維持することを意味します。