我将一些非常大的多维哈希传递给报表视图。因为我正在使用Heroku,所以我在运行内存分配。因为我必须复制这些变量来传递它们,所以我将这个要求加倍。我正在寻找使用Redis来存储和访问变量,但这是一项重大的工作。在传递这些变量时我是否缺少某些东西,以至于我不会在过程中复制它们?
来自report.rb的电话是:
message = KacMailer.daily_report(@associates, @managers, @assoc_wi_mgr, @assoc_sort, @issues, @items, @keys)
然后kac_mailer复制变量以将它们传递给报表视图:(编辑:将局部变量添加到nil)
def daily_report(associates, managers, assoc_wi_mgr, assoc_sorted, issues, items, keys)
@associates = associates
associates = nil
@managers = managers
managers = nil
@assoc_wi_mgr = assoc_wi_mgr
assoc_wi_mgr = nil
@assoc_sorted = assoc_sorted
assoc_sorted = nil
@issues = issues
issues = nil
@items = items
items = nil
@keys = keys
keys = nil
support_mail = mail(to: $kac.support, subject: 'Daily Report', from: $kac.support) do |format|
format.html { render 'kac_mailer/daily_report' }
end
end
答案 0 :(得分:0)
最后,变量没有重复,只是获得了一个新的指针。这意味着内存需求很难解决。哈希非常复杂,它们的创建和动态使用,即使是Redis也是一个难以解决的问题。在价格/性能方面,我最好的选择就是通过增加Heroku Scheduler中动态工作器dyno的大小来增加可用内存。这很简单,工作得很好。
答案 1 :(得分:0)
这里没有重复,只是引用 - 不会复制数据。
重复意味着创建大型结构的克隆/副本。再次引用数据只会添加新引用。