2016-01-26 9 views
6

मैं HachepContext.Current.Cache का उपयोग कर CacheItemUpdateCallback के साथ महंगा डेटा क्वेरी कैश करने के लिए कर रहा हूं।कैशिंग समाप्ति अपेक्षित के रूप में काम नहीं कर रही

विचार यह है कि उपयोगकर्ता को एक बार डेटा लोड करना होता है और फिर अपडेटकॉलबैक ऑब्जेक्ट को हर 30 मिनट में अद्यतन रखता है।

HttpContext.Current.Cache.Insert(cacheID, cachedObject, null, 
            expiryTimeStamp, 
            Cache.NoSlidingExpiration, 
            updateCallBack); 

परीक्षण कारणों से मैं इस तरह की समाप्ति तिथि (हर 20 सेकंड अद्यतन) सेट:

var expiryTimeStamp = DateTime.Now.Add(new TimeSpan(0, 0, 20)); 

यह सब ठीक काम करता है

यह मैं कैसे सम्मिलित/कैश के ऊपर लिख है । इसका मतलब है, यह हर 20 सेकंड में महंगी वस्तु को अपडेट कर रहा है - लेकिन केवल 25 मिनट के लिए। फिर ट्रिगर 'अपडेटकॉलबैक' अब और नहीं कहा जाता है!

मुझे लगता है कि समस्या यह है कि आईआईएस कैश का निपटान करता है ताकि कॉलबैक 'कैशइटेम अपडेट कैलकबैक' अब और नहीं निकाला जा सके ... लेकिन यह केवल एक अनुमान है।

जो मुझे मेरे सवाल की ओर जाता है:

वहाँ किसी भी सेटिंग मैं app.config में या IIS में स्थापित करने के लिए है? या मैं गलत क्या कर रहा हूँ?

संपादित करें: इसके अलावा, मुझे समझ नहीं आता क्यों CacheItemUpdateCallback साथ Insert overload एक पैरामीटर CacheItemPriority जरूरत नहीं है। हालांकि, overload with CacheItemRemovedCallback में प्राथमिकता पैरामीटर है। शायद, अगर मैं कैशइटेम प्राथमिकता को 'उच्च' पर सेट कर सकता हूं तो यह पहले से ही मेरे मुद्दे को हल करेगा।

संपादित करें: मुझे यह समस्या मिली: प्रत्येक एप्लिकेशन पूल के लिए एक निष्क्रिय टाइमआउट संपत्ति है जो 20 मिनट तक सेट की गई थी।

+0

क्या आपके पास अपडेट का कोड है? जिस तरह से आप इसे लागू करते हैं, इस पर इसका असर हो सकता है कि यह सब कैसे काम करता है। उदाहरण के लिए, "यदि कॉलबैक विधि अपवाद फेंकता है, तो एएसपी.नेट अपवाद को दबाता है और कैश किए गए मान को हटा देता है" ... शायद आप किसी कारण के लिए 25 मिनट के बाद अपवाद फेंक दें –

+2

हो सकता है कि आपके ऐप-डोमेन को आईआईएस द्वारा किसी भी के लिए पुनर्नवीनीकरण किया जा सके कारण (http://stackoverflow.com/questions/302110/what-causes-an-plication-pool-in-iis-to-recycle) और इस प्रकार एक खाली कैश के साथ शुरू होता है। – jlvaquero

उत्तर

2

एप्लिकेशन पूल के idle timeout को 20 मिनट (डिफ़ॉल्ट रूप से) पर सेट किया गया था। और क्योंकि यह एक परीक्षण उदाहरण था, वेबसाइट को जीवित रखने वाला कोई उपयोगकर्ता नहीं था।

1

यदि आपका अनुमान आईआईएस की समाप्ति कैश के बारे में सही साबित होता है तो this वह सेटिंग हो सकती है जिसे आप ट्विक करना चाहते हैं।

लेकिन मुझे लगता है कि यह हर बार सटीक 25 मिनट के बाद हो रहा है तो आपके पास एक छिपी कॉन्फ़िगरेशन सेट कहीं है क्योंकि यदि आप कैश की समाप्ति निर्दिष्ट नहीं करते हैं तो आइटम तब तक कैश किए जाएंगे जब तक प्रक्रिया चल रही हो या यदि वहां हो एक स्मृति आवंटन आपातकालीन है।

+0

मैंने पहले ही कोशिश की है - बिना किसी सफलता के। मेरे मामले में मैंने इसे एक साल तक सेट किया। मैं सोमवार को 6 दिनों का प्रयास करने जा रहा हूं, धन्यवाद! –

+0

हे फैबियन, प्रतिष्ठा की कमी के कारण मैं यहां टिप्पणी कर रहा हूं। बस मेरी स्पष्टता के साथ-साथ भविष्य के googlers के लिए, निष्क्रिय समय सीमा आपकी प्रक्रिया को रोकने के लिए मजबूर कर रहा था जिसके परिणामस्वरूप अंततः आईआईएस से अपने कैश को साफ़ करने के परिणामस्वरूप।सही ? यदि ऐसा है, तो निष्क्रिय टाइमआउट वास्तव में छिपी हुई कॉन्फ़िगरेशन थी;) –

+0

हाँ, दोस्त! यह छिपी हुई संपत्ति 'निष्क्रिय टाइमआउट' थी जो मुझे सिरदर्द पैदा कर रही थी। –

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