using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Caching;
using Xunit;
namespace Demo.Caching.Test
{
class MemoryCacheManagerTest
{
[Fact]
public void Test()
{
CacheItemPolicy policy = new CacheItemPolicy();
policy.SlidingExpiration = TimeSpan.FromSeconds(1);
MemoryCache.Default.Set("cacheKey4", 4, policy);
Assert.Equal(4, MemoryCache.Default.Get("cacheKey4"));
System.Threading.Thread.Sleep(600);
Assert.Equal(4, MemoryCache.Default.Get("cacheKey4"));
System.Threading.Thread.Sleep(600);
Assert.Equal(4, MemoryCache.Default.Get("cacheKey4"));
// Here I get error
// Expected: 4, Actual: (null)
System.Threading.Thread.Sleep(1000);
Assert.Null(MemoryCache.Default.Get("cacheKey4"));
}
}
}
उत्तर
शायद कारण यह है कि नींद गैर-निर्धारक है। यह आपके धागे को 600 मिलीसेकंड के लिए रोक नहीं देता है। यह के लिए धागे को कम से कम 600 एमएस के लिए रोक देता है। यह आपके द्वारा महसूस किए बिना 1 सेकंड स्लाइडिंग समाप्ति पर बहुत अच्छी तरह से जा सकता है।
@StripplingWarrior से 'PollingInterval' के बारे में भी जवाब देखें। चाल यह प्रतीत होती है कि मतदान अंतराल के नीचे देरी का अपर्याप्त रूप से इलाज किया जाता है। –
मुझे एक ही समस्या थी। लेकिन वास्तव में समस्या क्या है @ कोलिन ने कहा। Thread.Sleep
एक सेकंड से अधिक समय ले रहा है।
तो मैं एक बड़ा देरी
[TestMethod]
public void Sliding()
{
MemoryCache.Default.Add("test", 1,
new CacheItemPolicy
{
SlidingExpiration = new TimeSpan(0, 0, seconds: 5)
});
for (int i = 0; i < 15; ++i)
{
Assert.IsNotNull(MemoryCache.Default.Get("test"));
Thread.Sleep(700);
}
}
के साथ एक परीक्षण किए गए और यह पारित कर दिया। मुझे यकीन नहीं है कि यह हमेशा काम करेगा - शायद नहीं - लेकिन मैंने अभी पुष्टि की है कि स्लाइडिंग वास्तव में काम करती है।
यह नहीं है, जैसा कि अन्य उत्तरों ने थ्रेड के कारण कहा है। नींद() अपेक्षा से अधिक समय ले रहा है।
MemoryCache
अपने स्लाइडिंग टाइमर के साथ बहुत ही कमजोर प्रतीत होता है। मुझे लगता है कि ऐसा इसलिए है कि वे लॉकिंग से बच सकते हैं, और कैश के प्रदर्शन को बनाए रख सकते हैं।
- यदि आप 1 सेकंड या उससे कम की स्लाइडिंग समाप्ति सेट करते हैं, तो कैश आइटम को दूसरी बार बेदखल कर दिया जाएगा चाहे कितनी बार उन्हें एक्सेस किया जा सके।
- 1 और 2 सेकंड के बीच, अभी भी कैश आइटमों को बेदखल करने का मौका प्रतीत होता है। यह कुछ हद तक उस भार पर निर्भर हो सकता है जो कंप्यूटर के अधीन है, और यह निश्चित रूप से इस बात पर निर्भर करता है कि वस्तुओं को कब एक्सेस किया जाता है, लेकिन जैसा कि आप सोचते हैं उतना अनुमानित नहीं है। उदाहरण के लिए:
- यदि मैं 1.001 सेकंड से 1.24 सेकेंड तक कहीं भी समाप्ति सेट करता हूं, और 200 या 250 मिलीसेकंड तक पहुंच के बीच सोता है, तो यह कैश में मान रखता है; लेकिन अगर मैं 201 या 24 9 मिलीसेकंड के लिए सोता हूं, तो आइटम बेदखल हो जाता है।
- यदि मैं 1.25 सेकंड की समाप्ति निर्धारित करता हूं, तो मैं बिना किसी समस्या के 624 मिलीसेकंड तक सो सकता हूं, लेकिन अगर मैं 625 मिलीसेकंड हिट करता हूं तो कैश आइटम बेदखल हो जाता है।
- एक बार जब आप 2-सेकंड की समाप्ति पर आते हैं, तो यह ठीक से काम करता प्रतीत होता है भले ही आप केवल समाप्ति की समय सीमा से पहले ही आइटम तक पहुंच सकें।
तो मुझे लगता है कि पाठ 2 सेकंड के तहत मूल्यों के लिए सही ढंग से काम करने के लिए स्लाइडिंग समाप्ति पर भरोसा नहीं करना है। इसमें PollingInterval
के साथ 2 सेकंड पर सेट होने के साथ कुछ करना पड़ सकता है।
कोड:
var span = TimeSpan.FromSeconds(1); // change as necessary
var sw = new Stopwatch();
var cache = new MemoryCache("testcache");
sw.Start();
cache.Add("test", "hello", new CacheItemPolicy{SlidingExpiration = span});
Console.WriteLine(sw.ElapsedMilliseconds);
for (int i = 0; i < 40; i++)
{
Console.WriteLine(sw.ElapsedMilliseconds + ": " + cache.Get("test"));
Thread.Sleep(50); // change as necessary
}
- 1. Asp.net Mvc OutputCache विशेषता और समाप्ति
- 2. .NET कैशिंग स्लाइडिंग समाप्ति कैसे काम करता है?
- 3. मैं किसी अन्य वर्ग से कैशइटेम पॉलिसी पर अपडेट कैलबैक कैसे कार्यान्वित कर सकता हूं?
- 4. 301 asp.net 4.0
- 5. विधानसभा दुर्घटनाग्रस्त मेरी asp.net 4.0
- 6. ASP.NET प्रमाणीकरण समाप्ति कस्टम के टिकट पर समय
- 7. कैशइटेम क्षेत्रनाम संपत्ति जिम्मेदारी/उपयोग करता है?
- 8. पोस्टबैक पर ASP.Net चेकबॉक्स मान गलत है?
- 9. स्लाइडिंग ड्रावर
- 10. स्लाइडिंग UISearchBar
- 11. ajax में ASP.NET MVC गलत यूआरएल कॉल
- 12. गलत अनुरोध - अमान्य होस्टनाम ASP.NET MVC4
- 13. ASP.NET कैश आइटम समाप्ति की आवृत्ति बदल रहे हैं?
- 14. मोनोड्रॉइड स्लाइडिंग मेनू
- 15. एंड्रॉइड: स्लाइडिंग ड्रावर SurfaceView
- 16. स्लाइडिंग ड्रावर में ListViewResume
- 17. एचटीएमएल स्लाइडिंग सलाखों?
- 18. आधे स्लाइडिंग व्यूअर एंड्रॉइड
- 19. एंड्रॉइड स्लाइडिंग पैनल
- 20. आर डेटाटेबल स्लाइडिंग विंडो
- 21. ASP.NET
- 22. कुकीज़ समाप्ति सी #
- 23. एएसपी.NET 4.0
- 24. स्लाइडिंग विंडो एल्गोरिदम क्या है? उदाहरण?
- 25. कैश .एसएस में स्लाइडिंग एक्सप्लैशेशन - इसे रीसेट कब किया जाता है?
- 26. FormsAuthentication createPersistentCookie समाप्ति
- 27. विजुअल स्टूडियो 11 पावर टूल्स चेकइन पॉलिसी
- 28. मैवेन में अद्यतन पॉलिसी वास्तव में कैसे काम करता है?
- 29. ASP.NET में SQL सर्वर कॉम्पैक्ट 4.0 से कैसे कनेक्ट करें?
- 30. अपाचे सर्वर पर ASP.NET 4.0 वेबसाइट कैसे चलाएं?
सभी कोड, अच्छा सवाल के बारे में! – stephen