2009-07-10 346 views
19

मुझे पता है कि एक बहुत ही समान प्रश्न here है लेकिन मैं बेहतर स्पष्टीकरण प्राप्त करने की उम्मीद कर रहा था। मैं कभी भी HttpRontext.Cache का उपयोग HttpRuntime के बजाय क्यों करूंगा। कैश अगर HttpContext वास्तव में HttpRuntime का उपयोग करता है। दृश्यों के पीछे कैश करें?HttpRuntime कैश और HttpContext कैश के बीच क्या अंतर है?

लेख Simulate a Windows Service using ASP.NET to run scheduled jobs उमर में अपने कैश आइटम स्टोर करने के लिए HttpContext का उपयोग करता है, लेकिन जब जेफ Atwood यह लागू here वह बजाय HttpRuntime उपयोग करने के लिए चुना है। स्पष्ट रूप से इस विशेष परिस्थिति में यह समझ में आता है क्योंकि आपको कैश आइटम को HttpContext में वापस जोड़ने के लिए वेब अनुरोध करने की आवश्यकता नहीं है।

हालांकि मैं कुछ अच्छे पॉइंटर्स की तलाश में हूं कि एक बनाम दूसरे का उपयोग कब करें।

उत्तर

13

यह वास्तव में अंत में एक ही कैश है, केवल HttpContext.Current कभी-कभी शून्य हो सकता है (जब वेब संदर्भ में नहीं, या वेब संदर्भ में नहीं बल्कि अभी तक निर्मित नहीं किया गया है)। आप हमेशा HttpRuntime.Cache का उपयोग करने के लिए सुरक्षित रहेंगे।

2

जब आप नियमित वेब पेज पर होते हैं, तो आप सुरक्षित रूप से HttpContext.Cache या पृष्ठ की Cache संपत्ति का सुरक्षित रूप से उपयोग कर सकते हैं।

यदि आप ऐसा कुछ कर रहे हैं जो किसी पृष्ठ में नहीं है, तो आपको अक्सर HttpRuntime.Cache का उपयोग सुरक्षित रूप से प्राप्त करने के लिए करना होगा।

कुछ मामलों में अगर वहाँ एक http संदर्भ है या नहीं, उदाहरण के लिए यदि आप एक वेब पेज से एक अलग थ्रेड शुरू आप पता कर सकते हैं, कि धागा http संदर्भ नहीं है। अन्य मामलों में आपके पास कभी-कभी Application_Start विधि global.asax में एक http संदर्भ हो सकता है, क्योंकि अनुरोध हमेशा शुरू नहीं किया जा सकता क्योंकि अनुरोध है।

2

मुझे यह भी भ्रामक लगता है हालांकि हम सभी जानते हैं कि यह आंतरिक रूप से HttpRuntime.Cache आंतरिक रूप से लौटाता है। मुझे लगता है कि कैश का पर्दाफाश करने के लिए HttpRuntime एक बुरी पसंद है।

हर कोई sais कैसे Session सत्र-स्तरीय कैश और कैश के बारे में हम बात कर रहे हैं अनुप्रयोग स्तर है। HttpContext.Items के रूप में जाना जाने वाला संदर्भ देखने के लिए मैं Application.Cache को कैश के रूप में आज और HttpContext.Cache के रूप में उपयोग करना पसंद करूंगा।

अपने सवाल का जवाब देने के लिए के रूप में, मुझे लगता है कि हम सभी के लिए छड़ी चाहिए HttpRuntime.Cache हमारे कोड साफ भले ही हम इसे उपयोग करने के लिए विभिन्न तरीकों की क्या ज़रूरत है बना रही है। और जब आप गंभीरता से इसका उपयोग करने की योजना बनाते हैं तो आप अपने स्वयं के एपीआई को बेहतर तरीके से लपेटेंगे और आंतरिक रूप से HttpRuntime's या किसी अन्य कैश कार्यान्वयन (EntLib, Velocity, आदि ...) को कॉल करेंगे।

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