2011-09-15 13 views
7

एक साधारण उदाहरण के लिए, मैं तारों की एक सूची चाहता हूं। सूची में प्रत्येक आइटम को सूची में जोड़ने के बाद 5 मिनट "समाप्त" होना चाहिए। यद्यपि ऐसा करने के लिए एक आसान, अंतर्निहित तरीका नहीं हो सकता है, लेकिन मैं एक डेटा संरचना के साथ समाप्त करना चाहता हूं जिसका एपीआई ऐसा लगता है जैसे "बस काम करता है"।सी # सूची जहां आइटमों में टीटीएल

आप इस प्रकार के रूप में उपयोग कर सकते हैं:

var now = DateTime.now(); 
var list = new ListWithTTL<string>(); 
list.add("Bob", now); 
list.add("Joe", now.AddMinutes(1)); 
list.add("Tom", now.AddMinutes(2)); 
list.add("Tim", now.AddMinutes(2)); 

निरीक्षण तत्वों तुरंत

["Bob", "Joe", "Tom", "Tim"] 

कुछ ही मिनट बाद प्राप्त होते हैं यह उपज चाहिए

["Tom", "Tim"] 

आखिरकार सूची खाली होना चाहिए ।

+1

अपने प्रश्न क्या है? –

+0

बस एक कार्यान्वयन के लिए विचारों की तलाश में। – Larsenal

उत्तर

23

आप .NET 4 में MemoryCache कक्षा का उपयोग कर सकते हैं जो आपको कोई आइटम जोड़ने पर टीटीएल निर्दिष्ट करने की अनुमति देता है।

सरल उदाहरण:

MemoryCache cache = new MemoryCache("foo"); 
cache.Add("bar", "baz", DateTime.Now.AddSeconds(5)); 
var bar = cache["bar"];//returns "baz" 
Thread.Sleep(TimeSpan.FromSeconds(6)); 
var expired = cache["bar"]; //returns null 

जबकि आप एक टीटीएल सूची आप अपने समाधान के लिए इस खुद को अनुकूलित कर के साथ सीधे प्रदान नहीं, कैश समाप्ति खुद को लागू करने की कोई जरूरत नहीं।

+0

ओह, मुझे इसके बारे में पता नहीं था ... बहुत बेहतर +1 –

+0

+1 यही कारण है कि मैं हर दिन स्टैक ओवरफ्लो पढ़ता हूं। सामान सीखने के लिए। –

+0

@ ब्रोकनग्लस ** टीटीएल की समयसीमा समाप्त होने से पहले आइटम को 'मेमोरी कैश' ** से कभी निकाल दिया जाएगा? उदाहरण के लिए, क्या होता है जब 'MemoryCache.CacheMemoryLimit' तक पहुंच जाता है? –

0

आपको SortedDictionary<DateTime, ...> और एक कस्टम IComparer<DateTime> का उपयोग करने में सक्षम होना चाहिए जो शब्दकोश के क्रम को "उलट देता है" ताकि सबसे पुराने तत्व पहले आ सकें। शब्दकोश से तत्वों को वापस करने से पहले, बस पहले एन तत्वों को हटा दें जो बहुत पुराने हैं।

बेशक

, "कवर के अंतर्गत" संग्रह को संशोधित करने के लिए जब फोन करने वाले एक साधारण पढ़ने मल्टी-थ्रेडेड वातावरण में समस्याओं को जन्म दे सकता है उम्मीद कर रही है, लेकिन यह एक अलग विषय है ...

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