根据Python官方文档中的弱引用模块,“弱引用的主要用途是实现缓存或映射大型对象……”。因此,我使用了WeakValueDictionary来为长时间运行的函数实现缓存机制。但事实证明,缓存中的值几乎每次都需要重新计算,而不是等到下次实际使用时再从缓存中取出。由于在访问WeakValueDictionary中存储的值之间没有强引用,垃圾回收器将其清除(尽管内存完全没有问题)。
那么,我应该如何使用弱引用来实现缓存呢?如果我明确地保留了某处的强引用以防止GC删除我的弱引用,那么使用WeakValueDictionary就毫无意义了。可能应该有一些选项告诉GC:删除所有没有任何引用和仅具有弱引用的内容,只有在内存不足或超过某个阈值时才这样做。是否有这样的东西?或者是否有更好的策略来处理这种缓存?
那么,我应该如何使用弱引用来实现缓存呢?如果我明确地保留了某处的强引用以防止GC删除我的弱引用,那么使用WeakValueDictionary就毫无意义了。可能应该有一些选项告诉GC:删除所有没有任何引用和仅具有弱引用的内容,只有在内存不足或超过某个阈值时才这样做。是否有这样的东西?或者是否有更好的策略来处理这种缓存?