5

हाय मैं अपने सर्वर प्रदर्शन के बारे में एक सवाल मिल गया वी.एस. ... मैं एक क्लासिक एएसपी सेमी की मेजबानी मिल ~ 250 वेबसाइटों, हर वेबसाइट के लिए हम एक क्लासिक एएसपी शब्दकोशशब्दकोश/ग्राहक आवेदन चर

set dict = CreateObject("Scripting.Dictionary") 
dict.add "test1","Value Test1" 
dict.add "test2","Value Test2" 
dict.add "test3","Value Test3" 

का उपयोग कर निर्माण कि शब्दकोश तो प्रत्येक उपयोगकर्ता के लिए हर पृष्ठ पर लोड किया जाता है ...

कहते हैं कि हम मिल की सुविधा देता है के बारे में ~ 150 000 उपयोगकर्ताओं उन वेबसाइटों मासिक लदान के बारे में ~ 100k के उन लोगों के शब्दकोश प्रत्येक हर भार ...

मैं का उपयोग करना चाहिए का दौरा लो के बजाय शब्दकोश के रूप में अनुप्रयोग चर हर बार मेरे शब्दकोश का विज्ञापन?

और क्या यह वास्तव में मेरे सर्वर के प्रदर्शन में सुधार करेगा?

+0

"~ 100K" आइटम की संख्या या स्मृति की कुल आकार की आवश्यकता है। अगर बाद में कितनी चीजें हैं? क्या मूल्य हमेशा तार होते हैं या जटिल प्रकार भी होते हैं? – AnthonyWJones

+0

यह साइट के सभी उपयोगकर्ताओं द्वारा उपयोग किया जाने वाला एक आम शब्दकोश है या शब्दकोश उपयोगकर्ता से उपयोगकर्ता में भिन्न होता है? – AnthonyWJones

+0

सभी उपयोगकर्ता/साइट्स के लिए एक ही शब्दकोश –

उत्तर

2

निश्चित रूप से प्रत्येक एएसपी अनुरोध के लिए एक शब्दकोश लोड करना निश्चित रूप से एक बुरा विचार है और न केवल आपके प्रदर्शन को नुकसान पहुंचाएगा बल्कि आपकी वर्चुअल मेमोरी को भी खंडित करेगा।

इसके बजाय एक सरणी का उपयोग करना एक ही समस्या है, प्रत्येक अनुरोध को इसे पकड़ने के लिए आवश्यक सभी मेमोरी आवंटित करने की आवश्यकता होगी और इसे अभी भी प्रत्येक अनुरोध पर पॉप्युलेट करने की आवश्यकता है।

सरल उत्तर हाँ एप्लिकेशन एप्लिकेशन को शब्दकोश के रूप में उपयोग करेगा। यह आपको स्मृति और सीपीयू में बहुत कम खर्च करेगा। नकारात्मक पक्ष यह मौजूदा अनुप्रयोग ऑब्जेक्ट उपयोग के साथ टकराता है? इस समस्या से बचने के लिए आपको अपनी चाबियों को उपसर्ग करने की आवश्यकता हो सकती है।

+0

yup मैंने किया एक उपसर्ग का उपयोग करके एप्लिकेशन में इसे आज़माएं, इस समय मेरा शब्दकोश फ्रेंच या अंग्रेजी में बनाया गया था, इसलिए मैंने जो किया वह आपकी सहायता के लिए "डिक्ट -" और भाषा और "- माईकी" के रूप में मेरे एप्लिकेशन वैरिएबल कुंजी थक्स के रूप में है –

1

मैं पूरी तरह से केवल एक बार शब्दकोश लोड करने का सुझाव देता हूं, क्योंकि शब्दकोश वस्तु स्मृति के मामले में भारी है, लुकअप के मामले में धीमी है और बड़ा: स्मृति में हमेशा नष्ट नहीं होता है जब आपको लगता है कि इसे हो। इस प्रकार किसी उपयोगकर्ता ने पृष्ठ छोड़ने के बाद भी यह ऑब्जेक्ट डिस्प्ले करने के लिए प्रतीक्षा में स्मृति में रह सकता है (भले ही आप इसे स्पष्ट रूप से "नष्ट" करते हैं)। अब उस बार प्रति उपयोगकर्ता प्रति विज़िट की संख्या हिट करें ...

एक वैकल्पिक और अधिक मेमोरी-लाइट विधि एक सरणी का उपयोग करना होगा - एक-आयामी यदि आप कहीं भी सूचकांक का ट्रैक बनाए रख सकते हैं (सर्वोत्तम) , या एक लुकअप फ़ंक्शन के साथ द्वि-आयामी यदि आपको आवश्यकता हो (निश्चित रूप से यदि अन्य लोग अब कोड को भविष्य में बनाए रखते हैं)।

+0

अच्छी बात दुर्भाग्यवश मुझे लगता है कि जब भी शब्दकोश को अनुक्रमित किया जाता है तब से यह बड़ा होता है जब यह बड़ा होता है, तो मैं इसे एक बार फिर से लोड करने के बाद धीमा हो जाता हूं, मैं इसे एप्लिकेशन वैरिएबल में एक बार लोड करने की कोशिश करता हूं और देखता हूं कि क्या होता है आपके समय के लिए thx –

+0

"स्मृति में हमेशा नष्ट नहीं होता है जब आपको लगता है कि यह होना चाहिए" आपको यह जानकारी कहां से मिली ?? – AnthonyWJones

+0

एलएम: सरणी तेज होगी क्योंकि आप इसे किसी ऑब्जेक्ट ऑब्जेक्ट के साथ कुंजी पर लुकअप करने के बजाय सीधे इंडेक्स (0 से n तक) का उपयोग करके कॉल करेंगे (मान लीजिए कि आपके पास "test1/2/3 "कुंजी। एक तरफ के रूप में: याद रखें कि आपका सर्वर (मशीन या आईआईएस) किसी भी समय पुनरारंभ किया जा सकता है और जब यह कोई एप्लिकेशन वर्र्स मौजूद नहीं होगा, तो सुनिश्चित करें कि ऑब्जेक्ट के लिए आपके तंत्र की जांच पहले और यदि यह वहां नहीं है और फिर स्वचालित रूप से इसे पुन: प्रस्तुत करता है। –

1

मुझे पूरा यकीन है कि प्रत्येक पृष्ठ पर एक एकल scripting.dictionary को तुरंत चालू करना किसी भी वेबसाइट पर कोई समस्या नहीं होनी चाहिए। यदि प्रदर्शन एक मुद्दा है तो मैं सुझाव देता हूं कि समस्या कहां है, यह देखने के लिए पहले पृष्ठ पर प्रोफाइलिंग करें। बड़ी संभावना है कि कहीं भी 100+ एमएस खत्म करने के लिए एक अपरिपक्व क्वेरी है।

हम एक क्लासिक एएसपी साइट चलाते हैं जो एक दिन में 200k पृष्ठदृश्यों को संभालता है और प्रत्येक पृष्ठ (25+ उदाहरण) पर बड़े पैमाने पर scriping.dictionary का उपयोग करता है। हम इसे सभी प्रकार की चीजों के आधार के रूप में उपयोग करते हैं। क्या आपके पास यह दिखाने के लिए कोई उदाहरण स्क्रिप्ट है कि कचरे को हमेशा कचरा रंग से नष्ट नहीं किया जाता है? या किसी भी विकल्प की तुलना में यह लुकअप धीमा है? हमें सामना करने वाली एकमात्र असुविधा 'क्लोन' विधि की कमी है।

+0

समस्या स्वयं प्रदर्शन नहीं थी, लेकिन मैं हमेशा अपना कोड सुधारने और सर्वर को ब्रेक देने के लिए देख रहा हूं। मैं jsut के पास प्रत्येक पृष्ठ दृश्य पर अपने डैक्शनरी के पुनर्निर्माण के बजाय एप्लिकेशन वैरिएबल का उपयोग करने का पागल विचार था और कुछ इनपुट की तलाश में था (अगर यह एक अच्छा विचार था या नहीं) –

+1

मुझे लगता है, क्योंकि जेफ एटवुड ने पहले अपने ब्लॉग पर टिप्पणी की है, ये दिन सर्वर इतने शक्तिशाली होते हैं (और अधिक प्रसंस्करण शक्ति जोड़ने के लिए सस्ता) कि कोड अनुकूलन की आवश्यकता नहीं है जितनी मैंने कोड को सीखा ... –

+0

की आवश्यकता नहीं हो सकती है क्योंकि यह महत्वपूर्ण नहीं है;) –