2011-12-22 18 views
5

मैं अपने आवेदन में कैशिंग के लिए नए System.Runtime.Caching पुस्तकालय का उपयोग कर रहा है, और यह परिभाषित App.config में इस प्रकार है:System.Runtime.Caching BitmapImage जारी नहीं करता है वस्तुओं

<system.runtime.caching> 
    <memoryCache> 
     <namedCaches> 
      <add name="MyCache" cacheMemoryLimitMegabytes="10" 
       physicalMemoryLimitPercentage="30" pollingInterval="00:00:10" /> 
     </namedCaches> 
    </memoryCache> 
</system.runtime.caching> 

इस तरह _cache = new MemoryCache("MyCache");

और जोड़ने प्रविष्टियों: फिर, कोड से मैं इसे इस तरह का दृष्टांत _cache.Add(resourceName, resource, new CacheItemPolicy());

मैं इस कैश का उपयोग BitmapImage वस्तुओं स्टोर करने के लिए, और यह सुनिश्चित करें कैश ठीक से काम करता है, मैं दसजोड़ दिया है बनाने के लिए कैश में 210 ऑब्जेक्ट्स, प्रत्येक में लगभग 7 एमबी की छवि होती है। तब मैंने मतदान के लिए दस सेकंड इंतजार किया और कैश में प्रविष्टियों की जांच की, लेकिन वे सब वहाँ थे। एक भी वस्तु को बेदखल नहीं किया गया है।

क्या मैं यहां कुछ गलत कर रहा हूं? मुझे पता है कि सेटिंग App.config से सही ढंग से पढ़ी जाती हैं। क्या यह संभव है कि BitmapImage उदाहरण स्वयं छोटे हैं और केवल डिस्क पर छवि का संदर्भ देते हैं? और कैसे कैश निर्धारित करता है कि ऑब्जेक्ट का आकार क्या है?

उत्तर

3

इसका कारण यह है कि आप

new CacheItemPolicy() 

इस के साथ कैश करने के लिए जोड़ रहे हैं अपने मूल्यों को भी पार और आप चूक देना है, जो 31/12/9999 11:59:59 PM पर 00 के एक AbsoluteExpiration है जाएगा : 00

आप 2 विकल्प

CacheItemPolicy item = new CacheItemPolicy(); 

item.SlidingExpiration = new TimeSpan(0, 10, 0); 

या

है 10 मिनट के लिए यह करने के लिए

यदि आप स्लाइडिंग समाप्ति का चयन करते हैं तो यदि आप ऑब्जेक्ट को अपडेट करते हैं तो 10 मिनट रीसेट हो जाएंगे।

+0

मैंने इसे 'char []' के साथ परीक्षण किया है, और आइटम को बेदखल कर दिया गया था, भले ही मैंने 'नया कैशइटेम पॉलिसी() 'उपयोग किया था। किसी भी तरह से, कैश में कोई आइटम जोड़ने के लिए, मुझे 'कैशइटेम पॉलिसी' पैरामीटर प्रदान करना होगा। अनुरोधित व्यवहार प्राप्त करने के लिए मुझे किस मूल्य को पास करने की आवश्यकता है? –

+0

मेरा उत्तर अपडेट किया गया –

+0

यह अभी भी मुझे अनुरोधित व्यवहार नहीं देता है। मैं आइटम को समाप्त होने पर स्पष्ट रूप से उस समय को निर्धारित नहीं करना चाहता हूं - यदि मैं 'app.config' में परिभाषित स्मृति सीमा को पार कर गया था, तो मैं उन्हें समाप्त करना चाहता हूं। साथ ही, मुझे पूरा यकीन है कि आप 31/12/9999 11:59:59 अपराह्न +00: 00 को समाप्त होने वाली वस्तुओं के बारे में गलत हैं, क्योंकि जैसा कि मैंने उपरोक्त मेरी टिप्पणी में कहा था, मुझे आइटम समाप्त होने पर भी समाप्त हो गया था उन्हें नीति 'नई कैशइटेम पॉलिसी() 'के साथ जोड़ा गया। –

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