Trong ứng dụng của tôi, tôi sử dụng từ điển (hỗ trợ thêm, xóa, cập nhật và tra cứu) cả hai khóa và giá trị đều có thể được tạo tuần tự. đồ thị đối tượng lớn). Tôi đã đến một điểm khi từ điển trở nên quá lớn mà giữ nó hoàn toàn trong bộ nhớ bắt đầu thỉnh thoảng kích hoạt OutOfMemoryException
(đôi khi trong các phương pháp từ điển, và đôi khi trong các phần khác của mã).Một từ điển có thể lưu các phần tử của nó được truy cập ít thường xuyên hơn vào đĩa
Sau khi cố gắng thay thế hoàn toàn từ điển bằng cơ sở dữ liệu, hiệu suất giảm xuống mức không thể chấp nhận.
Phân tích các mẫu sử dụng từ điển cho thấy thường một phần nhỏ hơn giá trị "nóng" (được truy cập thường xuyên) và phần còn lại (phần lớn hơn) "lạnh" (hiếm khi truy cập hoặc không bao giờ). Thật khó để nói khi một giá trị mới được thêm vào nếu nó sẽ nóng hoặc lạnh, hơn nữa, một số giá trị có thể di chuyển qua lại giữa các bộ phận nóng và lạnh theo thời gian. Tôi nghĩ rằng tôi cần thực hiện một từ điển có thể xóa các giá trị lạnh của nó vào một đĩa trên một sự kiện bộ nhớ thấp, sau đó tải lại một số yêu cầu và giữ chúng trong bộ nhớ cho đến khi sự kiện bộ nhớ thấp tiếp theo. xảy ra khi trạng thái nóng/lạnh của chúng sẽ được đánh giá lại. Lý tưởng nhất, việc thực hiện nên điều chỉnh gọn gàng kích thước của các bộ phận nóng và lạnh của nó và khoảng thời gian xả tùy thuộc vào hồ sơ sử dụng bộ nhớ trong ứng dụng để tối đa hóa hiệu suất tổng thể. Bởi vì một số trường hợp của một từ điển tồn tại trong ứng dụng (với các khóa/giá trị khác nhau), tôi nghĩ rằng, chúng có thể cần phải phối hợp quy trình công việc của chúng.
Bạn có thể đề xuất cách triển khai từ điển như vậy không?
Bạn có nghĩ về việc thêm bộ nhớ cache vào phương pháp tiếp cận db không? Tôi nghĩ rằng bộ nhớ cache chuẩn với thời gian hết hạn trượt có thể cải thiện hiệu suất. – empi