मेरे पास कुछ ऐसे स्थान हैं जहां कुछ प्रकार के कैश को लागू करना उपयोगी हो सकता है। उदाहरण के लिए कस्टम स्ट्रिंग्स के आधार पर संसाधन लुकअप करने के मामलों में, प्रतिबिंब का उपयोग करके गुणों के नाम ढूंढना, या प्रति संपत्ति नाम केवल PropertyChangedEventArgs
रखना है।सी #: स्मार्ट कैश को कैसे कार्यान्वित करें
पिछले एक के एक साधारण उदाहरण:
public static class Cache
{
private static Dictionary<string, PropertyChangedEventArgs> cache;
static Cache()
{
cache = new Dictionary<string, PropertyChangedEventArgs>();
}
public static PropertyChangedEventArgs GetPropertyChangedEventArgs(
string propertyName)
{
if (cache.ContainsKey(propertyName))
return cache[propertyName];
return cache[propertyName] = new PropertyChangedEventArgs(propertyName);
}
}
लेकिन, यह काम होगा अच्छी तरह से? उदाहरण के लिए यदि हमारे पास अलग-अलग संपत्ति नामों का पूरा भार था, तो इसका मतलब यह होगा कि हम एक विशाल कैश के साथ खत्म हो जाएंगे, वहां कभी भी कचरा इकट्ठा या कुछ भी नहीं होगा। मैं कल्पना कर रहा हूं कि कैश किया गया क्या बड़ा मूल्य है और यदि एप्लिकेशन एक लंबे समय से चल रहा है, तो यह किसी प्रकार की समस्या के रूप में समाप्त हो सकता है ... या आप क्या सोचते हैं? एक अच्छा कैश कैसे लागू किया जाना चाहिए? क्या यह ज्यादातर उद्देश्यों के लिए पर्याप्त है? कुछ अच्छे कैश कार्यान्वयन के किसी भी उदाहरण जो समझने में बहुत मुश्किल नहीं हैं या लागू करने के लिए बहुत जटिल हैं?
"* वहाँ कंप्यूटर विज्ञान में केवल दो हार्ड चीजें हैं:। कैश अमान्यकरण और नामकरण बातें *" - फिल Karlton – JulianR
यह नहीं एक पूरी जवाब लायक, लेकिन इस विशेष कार्यान्वयन होगा है एक बहु थ्रेडेड वातावरण में शानदार रूप से विफल। कम से कम आपको 'GetPropertyChangedEventArgs() 'में' कैश 'तक पहुंच के चारों ओर एक लॉक की आवश्यकता है। बस किसी भी व्यक्ति की मदद करने की कोशिश कर रहा है जो इस के साथ आता है और प्रतिलिपि बनाता है। – aaronburro