2010-04-04 12 views
7

वहाँ के प्रबंध EntityContext जीवन पर कई सवाल किया गया हैप्रबंध EntityConnection जीवन

उदा Instantiating a context in LINQ to Entities

मैं इस निष्कर्ष पर आया हूं कि इकाई संदर्भ को यूनिट-ऑफ-वर्क माना जाना चाहिए और इसलिए पुन: उपयोग नहीं किया जाना चाहिए। महान।

लेकिन जब मेरी डेटाबेस का उपयोग को तेज करने के लिए कुछ शोध कर रही है, मैं इस ब्लॉग पोस्ट में भाग ...

Improving Entity Framework Performance

पद का तर्क है कि अन्य व्यवस्थाएं की तुलना में EFS खराब प्रदर्शन अक्सर की वजह से है EntityConnection ऑब्जेक्ट हर बार एक नया EntityContext ऑब्जेक्ट की आवश्यकता होती है।

इसका परीक्षण करने के लिए मैंने मैन्युअल रूप से Global.asax.cs एप्लिकेशन_स्टार्ट() में एक स्थिर EntityConnection बनाया है।

मैं तो

using(MyObjContext currContext = new MyObjeContext(globalStaticEFConnection) 
{ 
    .... 
} 

करने के लिए अपने सभी संदर्भ बयानों का उपयोग कर परिवर्तित यह भागा बातें अब तक जहाँ तक मैं बता सकता हूँ किसी भी त्रुटि के बिना थोड़ा है लगता है।

लेकिन क्या यह सुरक्षित है?

क्या अनुप्रयोगव्यापी स्थिर एंटीटीकनेक्शन दौड़ की स्थिति का परिचय देता है?

सादर, Kervin

+0

यह शायद एक पवित्र युद्ध शुरू करेगा। ;) – Nix

उत्तर

7

EntityConnection is documented to be not thread-safe। मुझे लगता है कि आप उन्हें पूल कर सकते हैं, लेकिन आप एक वेब अनुप्रयोग के लिए एकल, स्थैतिक कनेक्शन का उपयोग नहीं कर सकते हैं, क्योंकि इसमें कई धागे शामिल होंगे।

+0

धन्यवाद। मुझे यकीन था कि यह इतना आसान नहीं होगा, लेकिन मैं यह पता लगाने की कोशिश कर रहा हूं कि प्रदर्शन के लिए पूलिंग कनेक्शन है या नहीं। चूंकि एमएसडीएन ब्लॉग पोस्ट ने इसके लिए काफी मामला बनाया है। – kervin

+0

मैं .NET 4 में रीस्टेस्ट किए बिना कुछ भी नहीं बदलेगा। इसे पहले से ही संबोधित किया जा सकता है। –

2
  • अपने एफई संदर्भ आवेदन चौड़ा है, तो विचार है कि उपयोगकर्ता एक परिवर्तन (प्रतिबद्ध नहीं) & उपयोगकर्ता बी उसके परिवर्तन के लिए प्रतिबद्ध है बना दिया है, तो सभी परिवर्तन करने के लिए प्रतिबद्ध हो जाएगी डेटाबेस दोनों & बी उसी उदाहरण का उपयोग करते हैं

  • मेरी प्रोजेक्ट में, मैंने ईएफ संदर्भ - यानी प्रति वेबप्रवेस्ट इरादा किया। एक संदर्भ ऑब्जेक्ट वेब अनुरोध के अंत से शुरू होने से स्थिर है & उसी अनुरोध में सभी ऑपरेशन एक ही ईएफ संदर्भ के साथ काम करते हैं। इससे ऊपर उल्लिखित समस्या के बिना मेरी प्रसंस्करण में काफी तेजी आई है।

ईएफ संदर्भ के जीवनकाल को प्रबंधित करने के लिए इसे लागू करने का एक तरीका डीआई कंटेनर (मैं एकता का उपयोग कर रहा हूं) का उपयोग करना है। प्रति वेब अनुरोध आजीवन प्रबंधक को यूनिटी में बॉक्स से बाहर नहीं दिया गया है, लेकिन वहां कई लेख हैं जो दिखाते हैं कि यह कैसे किया जा सकता है।

एचटीएच।

+1

हाय धन्यवाद, लेकिन मेरा EntityContext आवेदन व्यापक नहीं है। इसका उपयोग करता है EntityConnection है। मैं EntityContext को "काम की इकाई" के रूप में उपयोग कर रहा हूं, यानी। मूल रूप से प्रत्येक पहुंच के साथ एक नया संदर्भ। – kervin

संबंधित मुद्दे