2011-09-15 30 views
7

Vì một ví dụ đơn giản, tôi muốn có một danh sách các chuỗi. Mỗi mục trong danh sách sẽ "hết hạn" 5 phút sau khi thêm nó vào danh sách. Mặc dù có thể không có cách dễ dàng, tích hợp để thực hiện việc này, tôi muốn kết thúc với cấu trúc dữ liệu có API giống như "chỉ hoạt động".Danh sách C# trong đó các mục có TTL

Bạn có thể sử dụng nó như sau:

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)); 

yếu tố Kiểm tra ngay lập tức sẽ mang lại

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

Một vài phút sau nó sẽ mang lại

["Tom", "Tim"] 

Cuối cùng trong danh sách cần phải có sản phẩm nào .

+1

câu hỏi của bạn là gì? –

+0

Chỉ cần tìm ý tưởng để thực hiện. – Larsenal

Trả lời

23

Bạn có thể sử dụng lớp MemoryCache trong .NET 4 cho phép bạn chỉ định TTL khi thêm mục.

ví dụ đơn giản:

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 

Trong khi không cung cấp cho bạn trực tiếp với một danh sách TTL bạn có thể thích ứng này cho giải pháp của bạn, không cần phải thực hiện bộ nhớ cache hết hạn bản thân.

+0

Ồ, tôi không biết về điều đó ... tốt hơn nhiều +1 –

+0

+1 Đây là lý do tại sao tôi đọc stackoverflow mỗi ngày. Để tìm hiểu công cụ. –

+0

@BrokenGlass Các vật dụng sẽ bị loại khỏi 'MemoryCache' ** trước khi TTL hết hạn? Ví dụ, điều gì sẽ xảy ra khi 'MemoryCache.CacheMemoryLimit' được truy cập? –

0

Bạn sẽ có thể sử dụng SortedDictionary<DateTime, ...> và tùy chỉnh IComparer<DateTime> rằng "đảo ngược" thứ tự của từ điển để các phần tử cũ nhất đến trước. Trước khi trả về các phần tử từ điển, chỉ cần xóa N phần tử đầu tiên quá cũ.

Tất nhiên, thay đổi bộ sưu tập "theo bao" khi gọi được mong đợi đọc đơn giản có thể dẫn đến các vấn đề trong môi trường đa luồng, nhưng đây là một chủ đề khác nhau ...

Các vấn đề liên quan