Hãy phân tích điều này trong khi cũng lưu ý rằng SQL có Mệnh đề ORDER BY:-
do until rs.eof
response.flush
counter = counter + 1
' A LOT of calculations and putting in array...
rs.movenext
loop
Lưu ý Response.Flush
, điều đầu tiên tôi sẽ làm là loại bỏ điều đó. Bạn có thể sẽ cần tăng Giới hạn đệm đáp ứng ASP (trong trình quản lý IIS). Flush đang gửi nội dung được tạo cho đến nay cho máy khách, nó đợi máy khách xác nhận đã nhận tất cả các gói được gửi trước khi hoàn tất. Đó là nơi tôi đoán 90% thời lượng hơn 5 phút được sử dụng.
Bây giờ là "RẤT NHIỀU tính toán". VBScript không được biết về hoạt động của nó. Mã này có thể mất một chút thời gian. Trong một số trường hợp, một số tính toán có thể được thực hiện bằng SQL tốt hơn nhiều so với trong tập lệnh, vì vậy đó là một lựa chọn. Cách khác sẽ là xây dựng một số thành phần được biên dịch COM để thực hiện công việc phức tạp (mặc dù một số kế toán cần thực hiện cho việc phân phối có thể làm mất đi các lợi ích). Tuy nhiên, có thể không tránh khỏi việc bạn cần phải thực hiện các calcs này trong VBScript.
Bây giờ rs.movenext
. Vòng lặp này có nghĩa là bạn giữ kết nối và tập hợp hàng mở trong hầu hết thời gian quá trình xử lý được yêu cầu. Đó là trong khi các máy chủ đang gửi các byte qua mạng tới máy khách và trong khi VBScript đang xử lý các con số. Một cách tiếp cận tốt hơn nhiều sẽ là hút tất cả các bộ hàng một cách nhanh chóng và ngắt kết nối khỏi DB, sau đó số crunch và cuối cùng kết xuất bộ đệm cho máy khách.
Hãy xem xét sử dụng tập hợp bản ghi đã ngắt kết nối (bạn chỉ định con trỏ tĩnh phía máy khách) hoặc thậm chí là GetRows
đơn giản phương thức của đối tượng tập bản ghi kết xuất toàn bộ tập hợp hàng vào một mảng 2 chiều. Điều này có nghĩa là bạn duy trì khóa trên các bảng khác nhau trong thời gian nhỏ nhất có thể.