मेरे पास यह देखने के लिए एक परिदृश्य है कि मेरा वेब ऐप सत्र में डेटा संग्रहीत कर रहा है और इसे पुनर्प्राप्त कर रहा है। मुझे यह इंगित करना चाहिए कि मैं अपने सत्र स्टोर के रूप में SQL सर्वर का उपयोग कर रहा हूं।एएसपी.नेट सत्र - बड़ी वस्तु बनाम बड़ी वस्तुएं
मेरा परिदृश्य मुझे बाद के उपयोग के लिए उपयोगकर्ता के सत्र में स्ट्रिंग मानों के लिए मैप किए गए अद्वितीय आईडी की एक सूची स्टोर करने की आवश्यकता है। वर्तमान कोड जो मैंने विरासत में प्राप्त किया है, एक कस्टम ऑब्जेक्ट के साथ List<T>
का उपयोग कर रहा है लेकिन मैं पहले से ही किसी प्रकार का शब्दकोश प्रदर्शन के लिए कहीं बेहतर दिख सकता हूं।
मैं विकल्पों के लिए दो विचारों परीक्षण किया है:
सत्र में एक
Dictionary<int, string>
भंडारण। जब मुझे तार वापस पाने की आवश्यकता होती है, तो मुझे एक बार सत्र से शब्दकोश मिलता है और शब्दकोश वस्तु पर प्रत्येक आईडी का परीक्षण कर सकता है।चूंकि सत्र मूल रूप से एक शब्दकोश की तरह है, इसलिए एक अद्वितीय सत्र कुंजी का उपयोग कर सीधे सत्र में स्ट्रिंग को संग्रहीत करें।
Session["MyString_<id>"] = stringValue"
। सत्र से मूल्य प्राप्त करना मूल रूप से व्यस्त ऑपरेशन होगा। 4552 बाइट्स, 0.1071 सेकंड आपरेशन करने के लिए- सत्र प्रत्यक्ष - - 4441 बाइट्स
- शब्दकोश:
मेरे परीक्षण के परिणाम आपरेशन मुझे क्या करना है और 100 से तार का उपयोग कर की जरूरत के आधार पर निम्न शो , ऑपरेशन करने के लिए 0.0845 सेकेंड
इन परिणामों से मैं देखता हूं कि मैं सत्र में कुछ जगह बचाता हूं (शायद क्योंकि मुझे एक शब्दकोश obj serialising का ओवरहेड नहीं मिला है ect) और सत्रों से मूल्यों को वापस प्राप्त करते समय यह तेज़ प्रतीत होता है, हो सकता है क्योंकि स्ट्रिंग ऑब्जेक्ट्स की तुलना में deserialise के लिए तेज़ हैं।
तो मेरा सवाल यह है कि क्या प्रदर्शन के लिए प्रदर्शन में बेहतर है कि सत्र में कई छोटी वस्तुओं को एक बड़े से ज्यादा स्टोर किया जाए? क्या बहुत छोटी वस्तुओं को बनाकर कुछ नुकसान हो रहा है, जो एक बड़ी वस्तु है जिसे मैंने नहीं देखा है?
आपको – Jonathan