2009-02-20 14 views
6

मैंने अपने एप्लिकेशन "header.ascx" में उपयोगकर्ता नियंत्रण बनाया है, मैं इस नियंत्रण में एक चयनित मेनू विशेषता को पेज़ कर रहा हूं जिस पर नियंत्रण चयनित मेनू मान निर्दिष्ट करता है। मान लीजिए, मैंने मूल्य "होम" या "सर्च" पास कर दिया है, फिर यह खोज मेनू का चयन करेगा (इसे हाइलाइट करें)।ASP.NET में उपयोगकर्ता नियंत्रण को कैशिंग करना?

मैं इस नियंत्रण को कैश करना चाहता हूं, जब चयनितमेनू विशेषता का मान बदलता है तो केवल कैश को रीफ्रेश किया जाएगा और इसे कैश से नियंत्रण को चुनना चाहिए ??

क्या एएसपीनेट में उपयोगकर्ता नियंत्रण को कैश करना संभव है ?? मैं ASP.NET 2.0 (सी #)

उत्तर

5

का उपयोग कर रहा हूं बेशक आप कर सकते हैं! इसे "फ्रैगमेंट कैशिंग" कहा जाता है। यहां Quickstarts page और MS Knowledge base का लिंक दिया गया है। इसके अतिरिक्त, Google

+0

lol +1 गूगल के लिए! आप इस लिंक को स्टैक ओवरफ्लो http://stackoverflow.com/questions/568837/caching-a-user-control-in-asp-net – Matt

6

एएसपी.नेट में उपयोगकर्ता नियंत्रण कैशिंग को fragment caching कहा जाता है।

आप नियंत्रण पर संपत्ति की स्थापना द्वारा कैश अलग-अलग नहीं कर सकते क्योंकि नियंत्रण वास्तव में नहीं बना है अगर यह कैश में पाया है: यह अपने पृष्ठ के शीर्ष करने के लिए एक OutputCache निर्देश जोड़कर किया है। यदि आप इसके कैश के पीछे कोड में नियंत्रण तक पहुंचने का प्रयास करते हैं, तो यह शून्य होगा।

क्या यह शर्त निर्धारित करती है कि नियंत्रण को कैश किया जाना चाहिए या नहीं, जिसे आप वर्तमान अनुरोध को देखकर निर्धारित कर सकते हैं? यदि ऐसा है, तो आप आउटपुट कैश निर्देश के भिन्नbycustom विशेषता (http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx) का उपयोग कर सकते हैं। आप पैरामीटर के रूप में वहां मौजूद किसी भी स्ट्रिंग को रख सकते हैं और फिर जब कैशिंग का मूल्यांकन किया जाता है तो GetVaryByCustomString() method from Global.asxa कॉल किया जाएगा और आप तर्क डाल सकते हैं कि नियंत्रण कैश किया जाना चाहिए या नहीं।

+0

@ हेलेफ़ेंट के बारे में एक अच्छे प्रश्न में जोड़ सकते थे, इस मामले में मुझे संदेह है कि वे शायद VaryByControl का उपयोग करें। – LukeH

+0

हां, यह VaryByControl होगा। – Cerebrus

1

मैं इसे एक अच्छा विचार है नियंत्रण में ही कैश करने के लिए नहीं लगता है:

  • नियंत्रण बहुत पहले समय के लिए बनाया है, यह दूसरों के बीच में अपनी मूल पेज के लिए संदर्भ है।
  • जब आप कैश से नियंत्रण पुनर्प्राप्त करते हैं, तो वे संदर्भ अब मौजूद नहीं हैं।

एक बेहतर दृष्टिकोण, मुझे लगता है, जो डेटा नियंत्रण के बजाय उपयोग कर रहा है कैश करने के लिए है। एएसपी.नेट पृष्ठ जीवन चक्र के दौरान इतने सारे नियंत्रण बनाता है, कि इस नियंत्रण को कैश करने से वास्तव में कुछ भी सुधार नहीं होता है।

फिर अंत में एक बेवकूफ सवाल: क्या यह नियंत्रण एक बाधा है? क्या आपको वास्तव में कैश की ज़रूरत है?

+1

उपयोगकर्ता नियंत्रण को किसी भी तरह से एक अच्छा विचार है, क्योंकि यह प्रतिपादन समय '(प्रदर्शन अनुकूलन) नियंत्रण को बचाता है। निश्चित रूप से जब इसे कैश किया जाता है तो आपको पेज में एक शून्य संदर्भ प्राप्त नहीं होगा जब तक कि कैश समाप्त नहीं हो जाता है। –

+0

@Zain, मुझे लगता है कि हम अलग-अलग चीजों का जिक्र कर रहे हैं। नियंत्रण को कैश करने से आप प्रतिपादन समय को सहेज नहीं पाएंगे, हालांकि आउटपुट कैशिंग होगा। –

0

संक्षेप करने के

VaryByCustom का उपयोग कर, इसका मतलब है

1- फिर से नियंत्रण बनाएँ।
2- कैश में नियंत्रण के कई संस्करण होने के बाद। जिसका उपयोग कस्टम स्थितियों मिलने पर किया जाएगा।

यह केवल अच्छा है अगर नियंत्रण बहुत समय ले जा रहा है निर्माण करने के लिए और हम संचित संस्करण की सीमित संख्या स्मृति बर्बाद नहीं करना होगा, और आवेदन, जबकि यह कैश किया गया है "या अशक्त" (नियंत्रण गुण का उपयोग करने की आवश्यकता होगी)।

लेकिन यह अच्छा नहीं होगा अगर कस्टम स्थितियां नियंत्रण गुणों के आधार पर ही हैं। मैं इसका उपयोग नहीं कर सकता, यह शून्य है।

उदाहरण के लिए

मैं की तरह कुछ तो लिखने के लिए अगर (देशों सूची में डिफ़ॉल्ट चयनित मान के संयुक्त राज्य अमेरिका नहीं है) पुनर्निर्माण करना चाहते हैं और कैश (यह एक अलग स्ट्रिंग दे)

अन्यथा

नहीं है जबकि अन्य वस्तुएं अनुबंध सूची तक पहुंचने की कोशिश कर रही हैं, यह शून्य की जांच करेगी, और देशों को संयुक्त राज्य अमेरिका में सूची छोड़ देंगी।

डेटा कैहिंग काम करेगा। यही एकमात्र रास्ता है।

कौन सहमत हैं?

उर समय के लिए धन्यवाद

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