एक थोड़ी देर हो चुकी है, लेकिन यहां एक प्रासंगिक उपयोग मामला है:
मैं वस्तुओं के दो प्रकार के कैश करने के लिए की जरूरत है: बड़े (deserialised) डेटा है कि 10 मिनट का समय लोड करने के लिए फ़ाइलों और राम प्रत्येक की लागत 15 जी, और छोटे (गतिशील रूप से संकलित) ऑब्जेक्ट्स जिनमें उन डेटा फ़ाइलों के आंतरिक संदर्भ होते हैं (छोटी वस्तुओं को भी कैश किया जाता है क्योंकि वे उत्पन्न करने के लिए ~ 10s लेते हैं)। ये कैश उन कारखानों के भीतर छिपी हुई हैं जो वस्तुओं की आपूर्ति करती हैं (पूर्व घटक को उत्तरार्द्ध का कोई ज्ञान नहीं है), और अलग-अलग बेदखल नीतियां हैं।
जब मेरी 'डेटा फ़ाइल' कैश किसी ऑब्जेक्ट को निकालती है, तो यह इसे कमजोर संदर्भ से बदल देती है, इसलिए यदि अगला ऑब्जेक्ट तब भी उपलब्ध है, तो हम इसे पुन: जीवंत कर सकते हैं (और इसके कैश टाइमआउट को नवीनीकृत कर सकते हैं)। इस तरह से हम वास्तव में निष्क्रिय होने से पहले किसी भी ऑब्जेक्ट को खोने (या गलती से डुप्लिकेटिंग) से बचने से बचते हैं (यानी कहीं और नहीं उपयोग किया जाता है)। ध्यान दें कि न तो कैश को दूसरे के बारे में पता होना आवश्यक है, और किसी भी अन्य क्लाइंट ऑब्जेक्ट्स को यह पता होना चाहिए कि कोई भी कैश नहीं है (उदाहरण: हम 'रखरखाव', कॉलबैक, पंजीकरण, पुनर्प्राप्ति और वापसी के दायरे की आवश्यकता से बचते हैं , आदि - चीजें बहुत आसान हो जाती हैं)।
तो हालांकि वीक रेफरेंस का उपयोग करके (कैश के बजाए) एक भयानक विचार है (क्योंकि आधुनिक जीसी आमतौर पर एल 2 सीपीयू कैश के आकार के लिए ट्यून किए जाते हैं, और नियमित कोड प्रति मिनट कई बार जल जाएगा), यह है के रास्ते के रूप में बहुत उपयोगी है अपने शेष कोड से अपने कैश छुपाएं।
"कोडप्लेक्स पर एक दर्जन" ... और फ्रेमवर्क में से एक। ASP.NET कैश सिस्टम.Web.Caching.Cache गैर-ASP.NET अनुप्रयोगों में उपयोग किया जा सकता है और यह काफी शक्तिशाली है। माइक्रोसॉफ्ट प्रलेखन का कहना है कि इसे क्लाइंट ऐप्स में उपयोग करने की अनुशंसा नहीं की जाती है (लेकिन वास्तव में क्यों नहीं कहती है), लेकिन मैंने इसे विभिन्न प्रकार के ऐप्स में सफलतापूर्वक उपयोग किया है। – Joe
मैंने HttpRuntime.Cache की कोशिश की, लेकिन यह मुझे पसंद नहीं है।मैंने लगातार कैश में आइटम जोड़े और जल्द ही कैश को बेदखल करने के बजाय आउटऑफमेमरी अपवाद मिला। – Rauhotz
"HttpRuntime.Cache, लेकिन यह काम नहीं करता है जैसा कि मुझे पसंद है ... OutOfMemoryException"। आश्चर्य की बात है, लेकिन आप कैश कॉन्फ़िगरेशन को एडजस्ट करने का प्रयास कर सकते हैं - उदा। PrivateBytesLimit और प्रतिशत भौतिक MemoryUsedLimit गुण। या OutOfMemoryException के लिए कुछ और कारण हो सकता है। – Joe