fairamountofresearch और कुछ errors के बाद, मैंने अपना कोड संशोधित किया ताकि यह प्रत्येक बार डेटाबेस पूछताछ या डेटा डालने पर एक नया डेटा कॉन्टेक्स्ट बनाता है। और डेटाबेस अक्सर पूछताछ की जाती है - 250k लेनदेन के प्रत्येक प्रक्रिया के लिए, लेनदेन डालने से पहले डेटाबेस आईडी, डिपार्टमेंट आईडी और श्रेणी प्राप्त करने के लिए डेटाबेस से पूछताछ की जाती है।डेटाकॉन्टेक्स्ट का पुन: उपयोग करने का नकारात्मक प्रदर्शन प्रभाव क्यों होगा?
तो अब मैं कोड को अनुकूलित करने की कोशिश कर रहा हूं क्योंकि यह केवल 15 लेनदेन को एक सेकंड में संसाधित कर रहा था। मैंने कुछ अपर्याप्त प्रश्न हटा दिए और कुछ इंडेक्स जोड़े और इसे 30/सेक तक पहुंचा दिया। मैंने तब सोचा कि भले ही हर कोई डेटाकॉन्टेक्स्ट हल्का वजन रखता है, फिर भी लेनदेन प्रति नया 4 बार बनाने के लिए कुछ खर्च करना पड़ता है, इसलिए मैंने डेटाकॉन्टेक्स्ट का पुन: उपयोग करने का प्रयास किया। मैंने पाया, मेरे आश्चर्य की बात है कि, संदर्भ का पुन: उपयोग करने से प्रदर्शन को 10 लेनदेन में गिरावट आई है!
ऐसा क्यों होगा? क्या ऐसा इसलिए है क्योंकि DataContext स्मृति में इकाइयों को कैश करता है और डेटाबेस से पूछने से पहले इसकी इन-मेमोरी सूची के माध्यम से पहली बार खोज करता है? इसलिए, यदि, उदाहरण के लिए, मैं ग्राहक के लिए ग्राहक आईडी (प्राथमिक कुंजी) की तलाश कर रहा हूं, जिसका नाम 'एमसीएस' है और ग्राहक नाम कॉलम पर क्लस्टर इंडेक्स है ताकि डेटाबेस क्वेरी तेज हो, इन-मेमोरी लुकअप धीमा हो जाएगा?
और क्या यह सच है कि इतने सारे डीबी कनेक्शन बनाने/निपटाने से चीज़ें धीमा हो सकती हैं, या यह सिर्फ एक और समयपूर्व अनुकूलन है? और यदि यह सत्य है, तो डेटाकॉन्टेक्स्ट का पुन: उपयोग करने का कोई तरीका है लेकिन क्या यह प्रत्येक linq-to-sql क्वेरी के लिए एक वास्तविक डेटाबेस क्वेरी करता है?