2011-12-13 13 views
6

मेरे पास एक एसक्यूएल क्वेरी (संग्रहित प्रो) है जो वेबग्रिड में परिणाम प्रदर्शित होने से पहले लगभग 8-10 सेकेंड लेता है। Asp.net-mvc3 में कैशिंग के संबंध में प्रदर्शन के लिए सबसे अच्छा अभ्यास क्या है, इसलिए उपयोगकर्ता को उस डेटा को लोड करने के लिए हर बार 8-10sec हिट नहीं लेनी पड़ती है (क्वेरी को कम अनुकूलन)?एमवीसी 3 डेटा कैशिंग तकनीक

उत्तर

11

आप कुछ प्रश्नों के तहत इस क्वेरी के परिणाम को संग्रहीत करने के लिए MemoryCache कक्षा का उपयोग कर सकते हैं। कुंजी क्वेरी मानदंडों का हैश हो सकता है (यदि आपके पास ऐसा है)। और एमएसडीएन पर इसका उपयोग करने के तरीके पर some guides हैं।

कैशिंग भालू को ध्यान में रखते हुए यह कैश डिफ़ॉल्ट रूप से स्मृति में संग्रहीत किया जाता है। इसका अर्थ यह है कि यदि आप इस एप्लिकेशन को किसी वेब फार्म में चला रहे हैं तो वितरित कैश का उपयोग करना अधिक दिलचस्प हो सकता है ताकि खेत के सभी नोड एक ही कैश किए गए डेटा को साझा कर सकें। यह कुछ वितरित कैशिंग समाधान के साथ ObjectCache कक्षा को विस्तारित करके किया जा सकता है। उदाहरण के लिए memcached एक लोकप्रिय है और इसमें .NET provider है। एक और वितरित कैशिंग समाधान AppFabric है।

+0

मेमोरी कैश शायद सही समाधान है, लेकिन मुझे कुछ परिदृश्य हैं जिनमें ऑब्जेक्ट्स को स्वचालित रूप से कैश (एमवीसी 3 के साथ) से निकाल दिया जाता है। इसके बारे में आपकी सलाह क्या है? क्या एमवीसी के साथ काम करने के लिए क्या कोई विशेष कॉन्फ़िगरेशन की आवश्यकता है? ओह ठीक है अगर आप इसे एक शॉट देना चाहते हैं, तो क्या आप कृपया http://stackoverflow.com/questions/7849000/memorycache-empty-just-after-adding-an-object पढ़ सकते हैं? मैं अभी भी उस मुद्दे से लड़ रहा हूं और समझ नहीं पा रहा हूं कि मैं कहां असफल रहा हूं। :(धन्यवाद। – BigMike

+0

@ बिगमाइक, आप कैश में ऑब्जेक्ट्स संग्रहीत करते समय एक समाप्ति नीति निर्दिष्ट कर सकते हैं। आप पूर्ण समाप्ति, समाप्ति स्लाइडिंग, मॉनीटर बदलने, परिभाषित कर सकते हैं ... यह बहुत लचीला है। –

+0

हाँ मैं कर सकता हूं, मैंने कोशिश की है दोनों स्लाइडिंग समाप्ति और पूर्ण समय की समाप्ति के साथ। कुछ परिदृश्यों में मुझे सबकुछ स्पष्ट रूप से कोई कारण नहीं मिला है। मजेदार बात यह है कि मेरे हटाए गए कॉलबैक में मुझे कैश स्पेसिफिक एविशन का कारण मिला है, लेकिन यह नहीं मिल सकता कि वास्तव में कौन सा बेदखल कर रहा है। – BigMike

3

यह इस क्रिया को कैशिंग कर रहा है।

[OutputCache(Duration = 300)] 
public ActionResult Action(){ 

//some operation 

return View() 
} 
+0

वह पूरी क्रिया को कैश करेगा (उदाहरण के लिए कार्रवाई भी निष्पादित नहीं की जाएगी), इसलिए यदि डेटा बदलता है तो इसे अगले 5 मिनट के लिए निष्पादित नहीं किया जाएगा। कभी-कभी यह मदद कर सकता है, लेकिन डेटा तक पहुंचने पर मुझे इसका उपयोग नहीं करना पसंद है। – BigMike

2

इस संग्रहित प्रक्रिया के पीछे आपके अंडरलेइंग डेटा कितनी बार बदलते हैं? तो अपेक्षाकृत शायद ही कभी, तुम बहुत अच्छे सुविधा का उपयोग कर सकते हैं - SqlCacheDependency

http://msdn.microsoft.com/en-us/library/ms178604.aspx

इस तरह अपने भारी सपा केवल आवश्यकता बुलाया जाएगा, और परिणाम जब तक संभव हो संचित किया जाएगा।

+0

उत्तर के लिए Thx। शायद इसे हर 3-4 घंटों के बारे में अपडेट करने की आवश्यकता होगी। हालांकि, मुझे एसक्यूएलकैड काम करने की अंतहीनता इसलिए धन्यवाद लेकिन मुझे शायद इसे अधिक बार अपडेट करने की आवश्यकता होगी। – JaJ

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