जब आप एक पूर्ण समाप्ति दिनांक के साथ System.Web.Caching.Cache
पर कोई आइटम जोड़ते हैं, जैसा कि निम्न उदाहरण में है, Asp.Net कैसे व्यवहार करता है? यह होता है:Asp.Net कब समाप्त हो गया कैश आइटम निकालें?
बस वह आइटम के रूप में समाप्त हो गई है, तो अमल अगले पहुँच प्रयास पर
CacheItemRemovedCallback
निशान?आइटम को कैश से हटाएं और तुरंत
CacheItemRemovedCallback
निष्पादित करें?HttpRuntime.Cache.Insert(key, new object(), null, DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, OnCacheRemove);
MSDN संकेत मिलता है कि यह तुरंत होता दिखाई देता है। उदाहरण के लिए, the "Expiration" section of the "ASP.NET Caching Overview" कहता है "जब वे समाप्त हो जाते हैं तो ASP.NET स्वचालित रूप से कैश से आइटम्स को हटा देता है।" इसी तरह, "How to: Notify an Application When an Item Is Removed from the Cache" विषय का उदाहरण कहता है "यदि GetReport
[उदाहरण में एक विधि] पर कॉल के बीच 15 सेकंड से अधिक समय समाप्त हो जाता है, तो एएसपी.नेट रिपोर्ट को कैश से हटा देता है।"
फिर भी, इनमें से कोई भी स्पष्ट नहीं है। वे यह नहीं कहते कि "कॉलबैक तुरंत निष्पादित किया जाता है" और मैं कल्पना कर सकता हूं कि उनके लेखकों ने एक आइटम को 'हटाने' के रूप में ऊपर दिए गए विकल्प 1 को कैसे सोचा होगा। तो मैंने एक त्वरित और गंदे परीक्षण किया, और देखो, यह तुरंत निष्पादित प्रतीत होता है - मुझे नियमित रूप से साठ सेकंड की कॉलबैक मिलती है जब भी कोई मेरी साइट तक नहीं पहुंचता है।
फिर भी, मेरा परीक्षण त्वरित और गंदा था, और टिप्पणियों में Is there a way to run a process every day in a .Net web application without writing a windows service or SQL server jobs के जवाब में, किसी ने सुझाव दिया है कि Asp.Net वास्तव में कॉलबैक को हटाने और निष्पादन को रोक देता है जब तक कि कुछ कैश तक फिर से पहुंचने का प्रयास नहीं करता।
क्या कोई इसे आधिकारिक रूप से व्यवस्थित कर सकता है या क्या इसे केवल कार्यान्वयन विस्तार माना जाता है?
मुझे नहीं लगता कि उस प्रश्न का आधिकारिक उत्तर हो सकता है क्योंकि, जैसा कि रेमंड चेन अक्सर इंगित करना पसंद करते हैं, आप सॉफ़्टवेयर के एक संस्करण के व्यवहार को भविष्य के सभी संस्करणों के लिए आधिकारिक मानते हैं। मेरे अनुभव में यह एक बुरा विचार है क्योंकि एएसपी.नेट किसी भी समय अपना व्यवहार बदल सकता है और अपना आवेदन तोड़ सकता है। – dkackman
आप इसका परीक्षण क्यों नहीं करते हैं। अपनी कॉलबैक पर एक फ़ाइल को लिखें और निर्माण की तारीख देखें और यह समाप्ति से कैसे संबंधित है। –
@ डक्कमैन - मुझे "अब और हमेशा के लिए" उत्तर की आवश्यकता नहीं है, मैं .NET 2.0 और 3.5 के लिए आधिकारिक उत्तरों के लिए बसने के लिए तैयार हूं। यह मेरे लिए केवल एक कार्यान्वयन विवरण की तरह प्रतीत नहीं होता है: मैं प्रलेखन से कहीं कहने की अपेक्षा करता हूं कि वास्तविक निष्कासन निश्चित नहीं है यदि वह मामला था। शायद एमएस असहमत है। मैं बस यह देखने की कोशिश कर रहा हूं कि मैंने दस्तावेज़ में कुछ अनदेखा किया है या नहीं। –