當您使用ActiveRecord::Base.connection.execute(sql_string)
時,您應該致電clear
以釋放內存?在執行原始SQL之後應該調用PG :: Result#clear嗎?
在this podcast 19:09,揚聲器(Rails的提交者誰也做了很多的活動記錄工作)說,如果我們使用ActiveRecord::Base.connection.execute
,我們應該叫clear
的結果,或者我們應該使用方法ActiveRecord::Base.connection.execute_and_clear
,這需要一個塊。
(他是在方法名有點不清楚。爲MySQL適配器的方法是free
和Postgres的適配器的方法是clear
。他還提到release
,但該方法不存在。)
我的理解是,他的說法,我們應該改變
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
而沒有clear
,我們不知道由此導致的任何問題。在某些情況下,未能致電clear
更有可能導致記憶問題?