2012-12-05 9 views
5

मुझे आश्चर्य है कि एनएससीएच के एक वैश्विक उदाहरण का उपयोग करना सबसे अच्छा है, या प्रत्येक घटक के लिए कई लोगों को इसकी आवश्यकता है।किसी ऐप पर एनएससीएच का सबसे अच्छा उपयोग

उदाहरण के लिए, मेरे पास कई दृश्य उप-वर्ग हैं जो छवियों में सामग्री खींचते हैं और उन्हें हर समय पुन: उत्पन्न करने से बचाने के लिए कैश करते हैं। क्या प्रति कक्षा एनएससीएच का एक उदाहरण होना चाहिए, या पूरे ऐप के लिए केवल 1 केंद्रीकृत एनएससीएसी है?

ध्यान दें कि मेरा मतलब किसी वस्तु के प्रति कैश का एक कैश नहीं है, यह ऐसा करने के लिए मंद है। मैं प्रत्येक वर्ग के लिए एनएससीएच के एक उदाहरण के बारे में बात कर रहा हूं।

उत्तर

3

यह स्पष्ट रूप से निर्भर करता है, लेकिन मैं आमतौर पर प्रत्येक प्रकार के कैश किए गए ऑब्जेक्ट के लिए एक कैश के लिए वोट दूंगा। इस तरह, आप प्रत्येक के लिए countLimit मान अलग-अलग कर सकते हैं, उदा। "50 सबसे हाल ही में डाउनलोड किए गए थंबनेल को रखें", "5 सबसे हाल ही में डाउनलोड की गई बड़ी छवियां रखें", "10 सबसे हाल ही में डाउनलोड किए गए पीडीएफ रखें", आदि

वास्तव में कम्प्यूटेशनल रूप से महंगा कार्यों के लिए, मैं भी नियोजित करता हूं इष्टतम प्रदर्शन के लिए दो स्तरीय कैशिंग, NSCache, और स्थानीय फाइल सिस्टम में अस्थायी/कैश निर्देशिका में सहेजने के लिए रैम का उपभोग करते समय महंगा डाउनलोड चक्र से बचने के लिए।

+0

मुझे प्रत्येक ऑब्जेक्ट के लिए अलग-अलग कैश नियम रखने का विचार पसंद है। और कैशों का प्रबंधन करने के लिए केंद्रीकृत वस्तु रखने के लिए अच्छा बिंदु। डिस्क पर सहेजें जाहिर है एक अच्छा अभ्यास है। – Olivier

2

यदि कैश किए गए आइटम घटकों में साझा किए जा सकते हैं, तो आपके पास एक एकीकृत कैश भी हो सकता है - लुकअप अधिक महंगा नहीं होगा और आपको कम से कम अपने कैश किए गए ऑब्जेक्ट्स की अनावश्यक प्रतियों को कम करने का मौका मिलेगा।

लेकिन यदि कैश किए गए आइटम प्रति घटक अद्वितीय हैं, तो उन्हें कैश में मिलाकर व्यर्थ है और कोड पठनीयता परिप्रेक्ष्य से भ्रमित होने की संभावना है। उस मामले में कैश को अलग रखें। यह आपको उन्हें अधिक सटीक रूप से नियंत्रित करने देता है - उदा। आप उन घटकों से कैशों में अधिक आक्रामक रूप से बेदखल कर सकते हैं जिनका तुरंत उपयोग नहीं किया जा रहा है।

+0

यह भी है कि मैं चीजों को कैसे देखता हूं। हालांकि, उस विषय पर और अधिक राय रखने के लिए उत्सुकता होगी। – Olivier