2012-10-22 10 views
6

मैंने here पढ़ा है कि पढ़ने के लिए डेटा पूछते समय ObjectTrackingEnabled से false कुछ प्रदर्शन को बढ़ावा देता है। मेरे प्रश्नों इस तरह दिखेगा:ऑब्जेक्टट्रैकिंग सक्षम और linq-to-sql

public return type TheQueryName (some parameters) 
{ 
    using (TheDC MyDC = new TheDC()) 
    { 
     var TheQuery = (...).ToList(); 

     return TheQuery; 
    } 
} 

1) मैं प्रदर्शन को बढ़ाने जोड़ना चाहते हैं, मैं सिर्फ लाइन ObjectTrackingEnabled = true; बस लाइन से पहले var TheQuery = (...).ToList();

2) इसके अलावा, जोड़ सकता हूँ अगर मैं एक प्रश्न में ObjectTrackingEnabled से true सेट करें, क्या मुझे इसे लौटने से पहले झूठी पर सेट करने की आवश्यकता है या मैं डेटा संदर्भ के विशेष उदाहरण के लिए ObjectTrackingEnabled सेट कर रहा हूं और अगली बार मैं एक नया डेटा संदर्भ तत्काल कर दूंगा ObjectTrackingEnabled का मूल्य वापस लाएगा वापस टी o false की इसकी डिफ़ॉल्ट स्थिति?

नोट: मैं केवल ऑपरेशन पढ़ने के लिए ObjectTrackingEnabled = false; जोड़ने की योजना बना रहा हूं।

धन्यवाद।

+0

यह कैसे चीजें नियंत्रण से बाहर पागल हो सकते हैं यदि आप अनावश्यक रूप से चीजों को ट्रैक कर रहे हैं के बारे में एक और उपयोगी ब्लॉग पोस्ट है: https://weblog.west-wind.com/posts/2014/dec/21/gotcha -entity-framework-get-slow-in-long-iteration-loops –

उत्तर

8

ऑब्जेक्टट्रैकिंग सक्षम नियंत्रित करता है कि आपका डेटा संदर्भ (TheDC आपके मामले में) लोड होने के बाद इकाइयों में परिवर्तन ट्रैक करेगा। चाहे आप चाहते हैं या नहीं, आपके विशिष्ट मामले पर निर्भर करता है।

स्वाभाविक रूप से, डेटा संदर्भ होने से कम चीजें कम हो जाएंगी, लेकिन बोझ की कीमत पर ट्रैकिंग परिवर्तनों के साथ। परिवर्तन ट्रैकिंग क्यों शांत है? क्योंकि आप कर सकते हैं:

  1. लोड अप कुछ संदर्भ से कुछ संस्थाओं
  2. उन्हें
  3. संशोधित नए संशोधित संस्थाओं के लिए अद्यतन प्रश्नों करने के लिए बाहर जोड़े, दूसरों को नष्ट
  4. कॉल SaveChanges और जाने डेटा संदर्भ आंकड़ा , हटाए गए लोगों के लिए हटाएं, आदि

परिवर्तन ट्रैकिंग अक्षम होने के साथ, आपको संदर्भ को स्पष्ट रूप से बताना होगा कि क्या बदल गया है, नए मूल्य क्या हैं, आदि

मान लीजिए कि आप अभी भी ऑब्जेक्ट ट्रैकिंग नहीं चाहते हैं, संपत्ति प्रत्येक विशिष्ट डेटा संदर्भ उदाहरण पर सेट है। इसका मतलब यह है कि आप या तो करने के लिए है:

  1. सेट इसे मैन्युअल रूप से हर डेटा संदर्भ के लिए आपके द्वारा बनाए गए तो जैसे संदर्भ के निर्माता में संदर्भ के लिए एक डिफ़ॉल्ट के रूप में
  2. सेट यह: this.Configuration.AutoDetectChangesEnabled = true;this blog post विवरण
के लिए देखें

उम्मीद है कि यह मदद करता है!

+0

बस स्पष्ट होने के लिए, मैं केवल ऑब्जेक्टट्रैकिंग को पढ़ने के लिए गलत ऑपरेशन सेट करने जा रहा हूं। और जहां तक ​​वाक्यविन्यास जाता है, क्या आप बिंदु 1 पर सवाल देख सकते हैं? – frenchie

+0

परिवर्तन ट्रैकिंग को अक्षम करने के संबंध में, जैसे ही मैं संदर्भ बनाउंगा, मैं इसे करूँगा। तो, आपके मामले में, क्वेरी से पहले, 'उपयोग' कथन –

0

आपके टैग और विषय पंक्ति 'Linq2SQL' कहती हैं लेकिन आपका प्रश्न Entity Framwork के बारे में है।

linq2SqlDBContext.ObjectTrackingEnabled = false; 
+1

साइमन_वेवर के बाद, AFAIK "DataContext" L2S में सही शब्द है; ईएफ ने w/"ऑब्जेक्ट कॉन्टेक्स्ट" शुरू किया, फिर जोड़ा और "डीबीकॉन्टेक्स्ट" में स्थानांतरित हो गया। इसके अलावा, एल 2 एस ऑब्जेक्टट्रैकिंग सक्षम है; देखें, उदाहरण के लिए: https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/how-to-retrieve-information-as-read-only – pakx

+0

मुझे यही उपयोग करने के लिए मिलता है एक ही समय में 3 अलग-अलग एमएस 'डेटाकॉन्टेक्स्ट' पीढ़ी: - / –

1

संदर्भ में करने के लिए:

'पारंपरिक Linq2SQL के लिए आप इस के बजाय जरूरत

1) मैं प्रदर्शन को बढ़ाने जोड़ना चाहते हैं, मैं सिर्फ लाइन जोड़ सकता हूँ ObjectTrackingEnabled = true; just before the line var TheQuery = (...).ToList();

क्वेरी प्रदर्शन वृद्धि नहीं ट्रैकिंग से आता है। तो इस उद्देश्य के लिए नए डेटाकॉन्टेक्स्ट के निर्माण के ठीक बाद, आप इस सुविधा को READ क्वेरी पर अक्षम करना चाहते हैं।

ObjectTrackingEnabled = FALSE 

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

  • कोई संबंधित समस्या नहीं^_^