Theo tài liệu Python chính thức cho mô-đun weakref, "việc sử dụng chính cho các tham chiếu yếu là thực hiện bộ đệm hoặc ánh xạ giữ các đối tượng lớn, ...". Vì vậy, tôi đã sử dụng một WeakValueDictionary để thực hiện một cơ chế bộ nhớ đệm cho một chức năng chạy dài. Tuy nhiên, khi nó bật ra, giá trị trong bộ nhớ cache không bao giờ ở lại đó cho đến khi họ thực sự sẽ được sử dụng một lần nữa, nhưng cần thiết để được recomputed gần như mọi thời gian. Vì không có tham chiếu mạnh mẽ giữa các truy cập vào các giá trị được lưu trữ trong WeakValueDictionary, GC đã loại bỏ chúng (mặc dù hoàn toàn không có vấn đề với bộ nhớ).Các vấn đề với GC khi sử dụng WeakValueDictionary cho bộ đệm
Bây giờ, làm cách nào để tôi sử dụng công cụ tham chiếu yếu để triển khai bộ nhớ cache? Nếu tôi giữ tài liệu tham khảo mạnh mẽ ở đâu đó một cách rõ ràng để giữ cho GC xóa các tham chiếu yếu của tôi, thì sẽ không có điểm nào bằng cách sử dụng WeakValueDictionary ngay từ đầu. Có lẽ nên có một số tùy chọn để GC cho biết: xóa mọi thứ không có tham chiếu nào cả và mọi thứ có tham chiếu yếu chỉ khi bộ nhớ bị hết (hoặc vượt quá ngưỡng nào đó). Có cái gì đó như thế không? Hoặc có chiến lược tốt hơn cho loại bộ nhớ cache này không?