加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby对象缓存

发布时间:2020-12-16 20:58:33 所属栏目:百科 来源:网络整理
导读:我有许多具有唯一ID的 Ruby对象,我目前正在哈希中进行缓存.为对象分配ID时,它会进入哈希.缓存是完整的,即具有存在于Ruby作用域中的ID的每个对象也应该在缓存中. 但是,一旦它们从所有其他范围中消失,我很难找到从缓存中删除对象的方法.当然,这是因为缓存中包
我有许多具有唯一ID的 Ruby对象,我目前正在哈希中进行缓存.为对象分配ID时,它会进入哈希.缓存是完整的,即具有存在于Ruby作用域中的ID的每个对象也应该在缓存中.

但是,一旦它们从所有其他范围中消失,我很难找到从缓存中删除对象的方法.当然,这是因为缓存中包含的对象不会被垃圾回收.

有没有解决这个问题的方法? WeakRef的文档建议使用WeakHash类,但实际使用它似乎不可接受,尽管它与我认为我的项目所需的非常接近.

解决方法

类似于WeakHash的东西会做到这一点.这是一个更完整的实现,可以处理Fixnums,Symbols和Floats(以及其他不可变类型,如果您将它们添加到列表中):
class WeakHash < Hash
  def []=(k,v)
    if(![Fixnum,Symbol,Float].include? k.class)
      k = WeakRef.new(k)
    end
    if(![Fixnum,Float].include? v.class)
      v = WeakRef.new(v)
    end
    super k,v
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读