2011-12-22 29 views
5

Tôi đang sử dụng thư viện System.Runtime.Caching mới cho bộ nhớ đệm trong ứng dụng của tôi, và định nghĩa nó như sau trong App.config:System.Runtime.Caching không phát hành BitmapImage đối tượng

<system.runtime.caching> 
    <memoryCache> 
     <namedCaches> 
      <add name="MyCache" cacheMemoryLimitMegabytes="10" 
       physicalMemoryLimitPercentage="30" pollingInterval="00:00:10" /> 
     </namedCaches> 
    </memoryCache> 
</system.runtime.caching> 

rồi, từ mã tôi nhanh chóng nó như thế này: _cache = new MemoryCache("MyCache");

và thêm các mục như thế này: _cache.Add(resourceName, resource, new CacheItemPolicy());

tôi sử dụng bộ nhớ cache này để lưu trữ BitmapImage đối tượng, và để đảm bảo bộ nhớ cache hoạt động đúng, tôi đã thêm mười BitmapImage đối tượng vào bộ nhớ cache, mỗi đối tượng chứa một hình ảnh khoảng 7MB. Sau đó tôi đợi mười giây để cuộc thăm dò xảy ra và kiểm tra các mục trong bộ nhớ cache, nhưng tất cả chúng đều ở đó. Không một đối tượng nào bị trục xuất.

Tôi có làm gì sai ở đây không? Tôi biết các thiết lập được đọc từ App.config một cách chính xác. Có thể bản thân các trường hợp BitmapImage là nhỏ và chỉ tham khảo hình ảnh trên đĩa? Và làm thế nào để bộ nhớ cache xác định kích thước của đối tượng là gì?

Trả lời

3

Điều này là do bạn đang thêm vào bộ nhớ cache với

new CacheItemPolicy() 

này sẽ ghi đè giá trị của bạn và cung cấp cho bạn giá trị mặc định, đó là một AbsoluteExpiration của 31/12/9999 23:59:59 00 : 00

để làm điều đó trong 10 phút bạn có 2 lựa chọn

CacheItemPolicy item = new CacheItemPolicy(); 

item.SlidingExpiration = new TimeSpan(0, 10, 0); 

hoặc

item.AbsoluteExpiration = DateTime.Now.AddMinutes(10); 

Nếu bạn chọn hết hạn trượt, 10 phút sẽ đặt lại nếu bạn cập nhật đối tượng.

+0

Tôi đã thử nghiệm điều này với 'char []' và các mục đã được gỡ bỏ mặc dù tôi đã sử dụng 'CacheItemPolicy()' mới. Dù bằng cách nào, để thêm một mục vào bộ nhớ cache, tôi phải cung cấp một tham số 'CacheItemPolicy'. Tôi cần những giá trị nào để vượt qua để có được hành vi được yêu cầu? –

+0

Cập nhật câu trả lời của tôi –

+0

Điều này vẫn không cho tôi hành vi được yêu cầu. Tôi không muốn đặt rõ ràng thời gian khi các mục sẽ hết hạn - tôi muốn chúng hết hạn nếu giới hạn bộ nhớ, như được định nghĩa trong 'app.config', đã bị vượt quá. Ngoài ra, tôi khá chắc chắn bạn đã sai về các mặt hàng hết hạn vào lúc 31/12/9999 11:59:59 PM: 00, bởi vì như tôi đã nói trong bình luận ở trên, tôi đã nhận được các mục hết hạn ngay cả khi tôi đã thêm chúng với chính sách 'new CacheItemPolicy()'. –

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