आइए इस बात को ध्यान में रखते हुए इसका विश्लेषण करें कि 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
पर ध्यान दें , पहली चीज जो मैं करूंगा वह है इससे छुटकारा। आपको शायद एएसपी प्रतिक्रिया बफरिंग सीमा (आईआईएस प्रबंधक में) बढ़ाने की आवश्यकता होगी। फ्लश क्लाइंट को अब तक जेनरेट की गई सामग्री भेज रहा है, यह क्लाइंट को पूरा होने से पहले भेजे गए सभी पैकेटों की प्राप्ति की पुष्टि करने की प्रतीक्षा करता है। यही वह जगह है जहां मुझे लगता है कि 5+ मिनट का 90% खर्च किया जा रहा है।
अब "बहुत गणना"। वीबीस्क्रिप्ट अपने प्रदर्शन के लिए नहीं जानता है। इस कोड में कुछ समय लग सकता है। कुछ मामलों में कुछ गणनाओं को स्क्रिप्ट की तुलना में SQL द्वारा बहुत बेहतर तरीके से किया जा सकता है, इसलिए यह एक विकल्प है। एक और जटिल काम करने के लिए कुछ COM संकलित घटक बनाना होगा (हालांकि कुछ लेखांकन को मार्शलिंग के लिए बनाया जाना चाहिए जो लाभ मिटा सकता है)। हालाँकि यह अपरिहार्य हो सकता है कि आपको इन कैल्क्स को VBScript में करने की आवश्यकता है।
अब rs.movenext
. इस लूप का मतलब है कि आप हर समय प्रसंस्करण की आवश्यकता के लिए कनेक्शन और रोसेट को खुला रखते हैं। यही वह समय है जब सर्वर क्लाइंट को नेटवर्क पर बाइट भेज रहे हैं और जबकि वीबीस्क्रिप्ट संख्याओं को क्रंच कर रहा है। एक बेहतर तरीका यह होगा कि सभी पंक्तियों को जल्दी से सोख लिया जाए और डीबी से डिस्कनेक्ट कर दिया जाए, फिर क्रंच नंबर और आखिरकार क्लाइंट को बफर डंप करें।
डिस्कनेक्ट किए गए रिकॉर्डसेट का उपयोग करने पर विचार करें (आप क्लाइंट साइड स्टैटिक कर्सर निर्दिष्ट करते हैं) या यहां तक कि सरल GetRows
रिकॉर्डसेट ऑब्जेक्ट की विधि जो पूरे रोसेट को 2-आयामी सरणी में डंप करती है। इसका मतलब यह होगा कि आप कम से कम समय के लिए विभिन्न टेबलों पर ताले बनाए रखेंगे।