Ruby 调整图像大小时使用的Rmagic内存

Ruby 调整图像大小时使用的Rmagic内存,ruby,ruby-on-rails-3,rubygems,rmagick,Ruby,Ruby On Rails 3,Rubygems,Rmagick,调整图像大小时,内存使用量增加40 MB至80 MB。这些文件大小不同,但没有一个大于300KB 经过一点分析,我发现了令人不快的方法 def avatar_resize path img = Magick::Image.read(path).first img.resize_to_fit(200,200).to_blob end 内存使用量的大幅增加是正常现象还是我需要做些其他事情来消除这些巨大的峰值?您需要创建或合成图像吗?如果不是的话,你可以用mini magick来代替。Rma

调整图像大小时,内存使用量增加40 MB至80 MB。这些文件大小不同,但没有一个大于300KB

经过一点分析,我发现了令人不快的方法

def avatar_resize path
  img = Magick::Image.read(path).first
  img.resize_to_fit(200,200).to_blob
end

内存使用量的大幅增加是正常现象还是我需要做些其他事情来消除这些巨大的峰值?

您需要创建或合成图像吗?如果不是的话,你可以用mini magick来代替。Rmagick与rails共享内存,而mini magick则为mogrify分配了单独的内存。

我可能会尝试避免使用.to_blob并将图像写入文件,因为这会将图像存储在内存中,这很可能会导致高内存使用率。

我最终将需要对其他转换和特殊功能的支持效果,但对于我现在所做的,这可能是一个很好的解决方案。谢谢,它似乎在我的桌面上运行得很好,但我把它推到了运行在Passenger中的服务器上,我仍然得到了与RMagick相同的行为。莫格里菲的记忆力和以前一样好。可能是另一张海报所建议的“打电话给”blob吗?可能是“打电话给”blob导致了价格飙升。我猜目标是将文件保存到数据库中?您是否正在使用carrierwave或曲别针之类的文件辅助库?也许你可以试试这个教程,看看你是否得到了和我试过的回形针一样的钉子,但是遇到了很多问题,我自己的问题就容易多了。我会调查卡里尔瓦夫。我将图像存储在数据库中,以避免将它们公开存储,但我认为我会尝试找到更好的解决方案,并且仍然能够限制谁可以看到图像。到目前为止,我找到的唯一其他解决方案是将图像文件重命名为长哈希或其他乱七八糟的文件,但这看起来很麻烦,而且由于模糊而带有隐私的味道。Carrierwave有一个Mongoid模块,用于在Mongo(文档数据库)中保存图像文件。您还可以选择将文件保存在各种云存储中,如Amazon的S3,当然这仍然不像在DB中那样私有。