2010-03-16 47 views
5

Tôi cần xây dựng một List<object> và lưu vào bộ nhớ cache danh sách và có thể nối thêm vào danh sách đó. Tôi cũng cần để có thể thổi nó đi một cách dễ dàng và tái tạo nó. Một cách đơn giản để thực hiện điều này là gì?Thực hiện bộ nhớ cache C# ASP.NET đơn giản

+1

Hãy nhớ rằng Danh sách của bạn sẽ không phải là chủ đề an toàn. – dugas

Trả lời

15

như có lẽ đây?

using System; 
using System.Collections.Generic; 
using System.Web; 

public class MyListCache 
{ 
    private List<object> _MyList = null; 
    public List<object> MyList { 
     get { 
      if (_MyList == null) { 
       _MyList = (HttpContext.Current.Cache["MyList"] as List<object>); 
       if (_MyList == null) { 
        _MyList = new List<object>(); 
        HttpContext.Current.Cache.Insert("MyList", _MyList); 
       } 
      } 
      return _MyList; 
     } 
     set { 
      HttpContext.Current.Cache.Insert("MyList", _MyList); 
     } 
    } 

    public void ClearList() { 
     HttpContext.Current.Cache.Remove("MyList"); 
    } 
} 

Đối với làm thế nào để sử dụng .....

// Get an instance 
var listCache = new MyListCache(); 

// Add something 
listCache.MyList.Add(someObject); 

// Enumerate 
foreach(var o in listCache.MyList) { 
    Console.WriteLine(o.ToString()); 
} 

// Blow it away 
listCache.ClearList(); 
+2

Vâng ... có thể sử dụng được. Nhưng tôi sẽ thực hiện một số thay đổi. Chủ yếu, tôi sẽ luôn luôn trả về một danh sách hợp lệ. Nếu nó không tồn tại, hãy tạo một bộ sưu tập trống mới và lưu nó vào bộ nhớ cache, thay vì chỉ trả lại bất kỳ thứ gì trong Cache ["MyList"], có thể là null. – Bryan

+0

Vâng Bryan, ví dụ này khá đơn giản. - Nhưng tôi đã đề nghị của bạn để tim và cập nhật mẫu của tôi. Cảm ơn. – jessegavin

+0

Trong nhiều/hầu hết các kịch bản thế giới thực, bạn sẽ muốn xóa các thay đổi đối với một số loại lưu trữ lâu dài. – quillbreaker

2

Tutorial Đây là những gì tôi thấy là hữu ích

Đây là một cái gì đó mẫu

List<object> list = new List<Object>(); 

Cache["ObjectList"] = list;     // add 
list = (List<object>) Cache["ObjectList"]; // retrieve 
Cache.Remove("ObjectList");     // remove 
0

Các bộ phận bộ nhớ đệm của "Tracing and Caching Provider Wrappers for Entity Framework", trong khi không đơn giản, vẫn là một bài đánh giá khá tốt của một số điều hữu ích để suy nghĩ về với bộ nhớ đệm.

Cụ thể, hai lớp InMemoryCacheAspNetCache và thử nghiệm của họ liên quan:

Tương tự như những gì các câu hỏi đã làm, bạn có thể quấn HttpRuntime.Cache hoặc HttpContext.Current.Items hoặc HttpContext.Current.Cache khi triển khai ICache.

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