ruby-on-rails – 在执行原始SQL后,是否应该调用PG :: Result #c
当你使用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期间自我清理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- axis1.4全部依赖包
- 利用C语言替换文件中某一行的方法
- ruby-on-rails – Rails – 这样安全吗?使用URL参数查询数
- JSF中partialSubmit和autoSubmit有什么区别?
- vb.net – Option Strict Intellisense错误但编译得很好
- swift UI专项训练37 实时显示搜索结果的搜索框SearchBar
- c – ‘struct(*)[]’和’struct * []’之间有什么区别?
- UIKit框架-高级控件Swift版本: 4.UICollectionView方法/属性
- macos – Swift错误“不可变值只有变异成员”
- C#中的WebBrowser控件的属性、方法及操作演示代码