Để gọn gàng, bộ nhớ cache trong bộ nhớ SIMPLE tồn tại trong hệ sinh thái Net..Net Bộ nhớ trong bộ nhớ đơn giản
Những gì tôi đang tìm kiếm là:
- Không cấu hình (trừ các cuộc gọi API đơn giản). Tôi không muốn gây rối với các tập tin cấu hình bên ngoài vì chúng chỉ phức tạp triển khai.
- Cùng một quy trình (không phải một số quy trình hoặc máy chủ bên ngoài). Ưu tiên sử dụng được tạo ra dễ dàng như
var myCache = new SimpleCache(1024 * 1024 * 100); // 100 MB
- giới hạn Bộ nhớ rõ
- Items xóa từ bộ nhớ cache dựa trên ít nhất sử dụng
- Time-based hết hạn (không bắt buộc, nhưng làm cho nó có khả năng hữu ích trong các tình huống khác)
- trình với Net 3,5
tôi đã reasearched các tùy chọn này:
- ASP.Net System.Web.Caching
- API của nó không hỗ trợ bất kỳ loại kiểm soát nào đối với kích thước bộ nhớ cache, cũng như không ưu tiên dựa trên mức sử dụng. Do đó bạn hoàn toàn ở lòng thương xót của nó như khi nó quyết định có đủ áp lực bộ nhớ để làm trống bộ nhớ cache.
- System.Runtime.Caching
- Không một tùy chọn như thế này là đã được bổ sung trong Net 4.0, và sau này dường như chỉ ra nó có hiệu suất kém: Performance of system.runtime.caching
- Microsoft Enterprise Library - Caching Block
- Khác với danh tiếng nặng ký, tôi không thích cấu hình của nó bằng cách sử dụng tệp XML hoặc app.config. Hơn nữa, trong khi nó hỗ trợ giới hạn kích thước của bộ đệm dựa trên NUMBER đối tượng được lưu trữ, nó không có cơ chế để hạn chế SIZE của các đối tượng đó.
- NCache
- Có lẽ hơi quá đáng đối với trường hợp sử dụng tôi muốn, nhưng quan trọng nhất là nó là một sản phẩm trả tiền mà không phải là điều mà tôi muốn làm thỏa thuận với (so với tôi chỉ viết một trong một ngày hoặc hai). Như thường lệ, ấn bản tốc hành của nó có giới hạn sử dụng làm nản lòng việc sử dụng nó cho bất kỳ mục đích sản xuất nào.
- memcached
- ngược lại chính xác những gì tôi muốn (bên ngoài quá trình phân phối)
tôi đang làm việc với Nghị định thư Buffers Google (protobuf-net), vì vậy tôi DO có một ước lượng tương đối chính xác của dấu chân bộ nhớ của mỗi mục. Tôi đang lưu vào bộ nhớ đệm dữ liệu từ truy cập cơ sở dữ liệu, nhưng tôi không có mong muốn sử dụng một ORM chính thức (tôi thực sự đang sử dụng PetaPoco, nhưng đó là bên cạnh điểm).Ở giai đoạn này, tôi đang lên kế hoạch triển khai bộ nhớ cache của riêng mình, sử dụng danh sách liên kết kép và băm (từ điển) để cung cấp cho các mục được sử dụng gần đây nhất từ bộ nhớ cache khi đạt đến giới hạn bộ nhớ cache. Tuy nhiên, tôi muốn kiểm tra xem liệu có ai biết về bất kỳ lựa chọn phù hợp nào trước khi tôi tự mình lăn.
Điều này không bao giờ đơn giản, bộ nhớ cache không có chính sách hết hạn tốt là rò rỉ bộ nhớ. Không thích những gì có sẵn luôn là động lực số một để xây dựng của riêng bạn. –
Thay vì chính sách hết hạn, tôi muốn chỉ định dung lượng bộ nhớ tối đa cần thiết. Bạn thực sự không thể đo được bao nhiêu đối tượng bộ nhớ đang chiếm .Net, nhưng các bộ đệm giao thức mà tôi đang sử dụng có một phép đo hợp lý hữu ích. –
Nếu bạn phát triển điều này là một bộ nhớ cache khá chung chung, thì có lẽ bạn có thể đặt nó trên CodeProject hoặc tương tự, để người khác sử dụng? Nên khá đơn giản để có được một nguyên mẫu đơn giản với nhau và rất đơn giản để có được vùng phủ sóng thử nghiệm cao. – Michael