Mari kita analisis ini sambil mengingat SQL memiliki ORDER BY Clause:-
do until rs.eof
response.flush
counter = counter + 1
' A LOT of calculations and putting in array...
rs.movenext
loop
Perhatikan Response.Flush
, hal pertama yang akan saya lakukan adalah menyingkirkan itu. Anda mungkin perlu meningkatkan Batas Penyangga Respons ASP (di manajer IIS). Flush mengirimkan konten yang dihasilkan sejauh ini ke klien, menunggu klien untuk mengakui penerimaan semua paket yang dikirim sebelum selesai. Di situlah saya akan menebak 90% dari 5+ menit dihabiskan.
Sekarang "BANYAK perhitungan". VBScript tidak tahu kinerjanya. Kode ini mungkin membutuhkan waktu. Dalam beberapa kasus beberapa perhitungan dapat dilakukan jauh lebih baik dengan SQL daripada dalam skrip sehingga merupakan salah satu opsi. Yang lain adalah membangun beberapa komponen yang dikompilasi COM untuk melakukan pekerjaan yang kompleks (walaupun beberapa akuntansi perlu dibuat untuk menyusun yang dapat menghapus manfaat). Namun mungkin tidak dapat dihindari bahwa Anda perlu melakukan perhitungan ini di VBScript.
Sekarang rs.movenext
. Loop ini berarti Anda menahan koneksi dan rowset terbuka hampir sepanjang waktu pemrosesan diperlukan. Itu saat server mengirim byte melalui jaringan ke klien dan saat VBScript sedang menghitung angka. Pendekatan yang jauh lebih baik akan menyedot semua rowset dengan cepat dan memutuskan sambungan dari DB, lalu angka crunch dan akhirnya membuang buffer ke klien.
Pertimbangkan untuk menggunakan recordset yang terputus (Anda menentukan kursor statis sisi klien) atau bahkan GetRows
sederhana metode objek recordset yang membuang seluruh rowset ke dalam array 2 dimensi. Ini berarti Anda mempertahankan kunci pada berbagai tabel dalam waktu sesingkat mungkin.