2011-02-08 6 views
7

एक वेबसाइट में, अगर मैं एक वर्ग है: एक पेज मेंकिसी संकलित क्वेरी को एप्लिकेशन के जीवन चक्र के दौरान कितनी बार पुन: संकलित करना पड़ता है?

public class Provider 
{ 
    static readonly Func<Entities, IEnumerable<Tag>> AllTags = 
     CompiledQuery.Compile<Entities, IEnumerable<Tag>> 
     (
      e => e.Tags 
     ); 

    public IEnumerable<Tag> GetAll() 
    { 
     using (var db = new Entities()) 
     { 
      return AllTags(db).ToList(); 
     } 
    } 
} 

मेरे पास है:

protected void Page_Load(object sender, EventArgs ev) 
{ 
    (new Provider()).GetAll(); 
} 

कितनी बार क्वेरी संकलित किया जाएगा? हर बार पेज लोड होता है ...? एक बार आवेदन में ...?

+0

@Martinho फर्नांडीस: यह केवल आधा सवाल ... आप कर रहे हैं (गलत तरीके से) ओपी संभालने नहीं बारे में पता कैसे स्थिर क्षेत्रों ASP.NET में काम है। – leppie

+0

ऐसा लगता है कि आप [अपने अंतिम प्रश्न] के जवाब में इस प्रश्न का उत्तर पहले ही प्राप्त कर रहे हैं (http://stackoverflow.com/questions/4932594/when-should-i-use-a-compiledquery)। आप यहां अलग-अलग पूछने की क्या कोशिश कर रहे हैं? –

+0

@ कोडी ग्रे, अच्छा संपादन! धन्यवाद! :) – BrunoLM

उत्तर

1

इसे देखकर संकलित किया गया है। मैं एक बार कहूंगा। इसे फिर से तैयार करने की आवश्यकता क्यों होगी? क्या संकलित प्रश्नों का मुद्दा नहीं है?

संकलित क्वेरी को देखते हुए एक बार प्रति आवेदन उदाहरण/जीवन, स्थिर है। नोट: जीवनकाल ओवरलैप हो सकता है।

4

के बाद से यह एक स्थिर सदस्य, एक बार जब वर्ग एप्लिकेशन डोमेन भरी हुई है है।

1

मैं एक बार प्रति AppDomain कहूंगा, क्योंकि यह एक स्थिर चर है।

-1

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx#Y696

"स्थैतिक सदस्य से पहले पहली बार पहुंच है स्टेटिक सदस्यों प्रारंभ कर रहे हैं, और स्थिर निर्माता से पहले, किसी भी कहा जाता है, तो।"

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

हालांकि, क्या यह संकलित करता है? ऐसा लगता है कि आप एक तत्काल वर्ग से एक स्थिर सदस्य लोड करने की कोशिश कर रहे हैं।

+0

स्थैतिक कन्स्ट्रक्टर अनिवार्य नहीं है। अन्य बिंदु मान्य है –

+0

मैंने यह नहीं कहा कि यह अनिवार्य था। मैंने कहा कि उसके पास एक नहीं था। और दस्तावेज़ीकरण के अनुसार, इसका मतलब है कि यह स्थिर फ़ील्ड सेट नहीं करता है जब तक उनका उपयोग नहीं किया जाता है। – William

1

आप अपने AllTags क्वेरी इस तरह से यह केवल एक बार संकलित किया जाएगा निर्धारित करते हैं। जूली लर्मन द्वारा वेब अनुप्रयोगों और वेब सेवाओं में संकलित प्रश्नों के बारे में यह blog post देखें।

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