2013-06-06 24 views
7

Tôi có một lớp trình tạo để tạo một cá thể thực hiện IDisposable. Bất cứ khi nào mục để xây dựng đã có trong bộ nhớ cache, trình xây dựng sẽ trả về cá thể đó thay thế. Câu hỏi của tôi là, bộ nhớ cache sẽ gọi phương thức Dispose() trên các mục IDisposable nó chứa khi chúng bị loại bỏ hoặc tôi có phải mã hóa rõ ràng hành vi đó trên CacheItemPolicy.RemovedCallback gọi lại không?Liệu System.Runtime.Caching.MemoryCache có vứt bỏ các mục IDisposable khi bị đuổi không?

Trả lời

8

Không được gọi số Dispose. Nó rất dễ dàng để kiểm tra.

public class TestClass : IDisposable 
{ 
    public void Dispose() 
    { 
     Console.WriteLine("disposed"); 
    } 
} 

MemoryCache _MemoryCache = new MemoryCache("TEST"); 

void Test() 
{ 
    _MemoryCache.Add("key", 
         new TestClass(), 
         new CacheItemPolicy() 
         { 
          AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10), 
          RemovedCallback = (_) => { Console.WriteLine("removed"); } 
         }); 

} 
+0

@RobSiklos Vui lòng không sửa mã trước khi thử nghiệm. Đúng vậy. Lambda yêu cầu một tham số mà tôi không sử dụng. Tôi đã trả lời câu trả lời. – I4V

+0

rất rất xin lỗi - Tôi nghĩ đó là lỗi đánh máy – RobSiklos

+0

Tôi sẽ giữ thử nghiệm này xung quanh như một thử nghiệm đơn vị, các phiên bản sau của khung có thể thay đổi hành vi này, và bạn sẽ thích một thử nghiệm cho thấy rằng điều này đã thay đổi! –

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