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

ruby-on-rails – 在执行原始SQL后,是否应该调用PG :: Result #c

发布时间:2020-12-17 03:18:26 所属栏目:百科 来源:网络整理
导读:当你使用ActiveRecord :: Base.connection.execute(sql_string)时,你应该调用结果清除以释放内存吗? 在this podcast的19:09,扬声器(一个在Active Record上做了大量工作的Rails提交者)说如果我们使用ActiveRecord :: Base.connection.execute,我们应该在结果
当你使用ActiveRecord :: Base.connection.execute(sql_string)时,你应该调用结果清除以释放内存吗?

在this podcast的19:09,扬声器(一个在Active Record上做了大量工作的Rails提交者)说如果我们使用ActiveRecord :: Base.connection.execute,我们应该在结果上调用clear,否则我们应该使用方法ActiveRecord :: Base.connection.execute_and_clear,它占用了一个块.

(他对方法名称有点不清楚.MySQL适配器的方法是免费的,Postgres适配器的方法是明确的.他还提到了发布,但该方法不存在.)

我的理解是他说我们应该改变

result = ActiveRecord::Base.connection.execute(sql_string).to_a
process_result(result)

ActiveRecord::Base.connection.execute_and_clear(sql_string,"SCHEMA",[]) do |result|
  process_result(result)
end

要么

result = ActiveRecord::Base.connection.execute(sql_string)
process_result(result)
result.clear

播客是我听到这个声明的唯一地方,我找不到任何其他相关信息.我正在使用的Rails应用程序在许多实例中使用execute而不清楚,并且我们不知道由它引起的任何问题.在某些情况下,未能通知清除更有可能导致内存问题吗?

解决方法

这取决于适配器.请记住,Rails不控制execute返回的对象.如果您正在使用PostgreSQL,您将获得PG :: Result,并使用mysql2适配器,您将获得一个Mysql2 :: Result.

对于PG(记录为here),除非autoclear,否则需要调用clear?返回true或者你会得到内存泄漏.如果您有足够大的结果集以确保在清理之前不会导致内存问题,您可能还需要手动调用clear.

Mysql2似乎没有通过Ruby API公开它的自由,并且似乎总是在GC期间自我清理.

(编辑:李大同)

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

    推荐文章
      热点阅读