我有一个Ruby on Rails应用程序,可以加载数千个地图标记,并使用Google Maps API在地图上显示它们。视图中所有标记都是必需的,因此它们必须由控制器加载并显示。
因此,每次用户加载其地图时,我就会分配大量内存,因此,当我超过500MB内存限制时,Heroku中经常会遇到“ R14-Ruby中的内存配额超出(MRI)”错误。
我通过使用较少数据密集型查询来优化了代码,例如:
@user.markers.select(:coordinates)
相对于:
@user.markers
但是,由于我正在加载的对象的原始数量(每位用户在地图上有时超过2,000-3,000),我仍在实例化大量内存。随着多个用户提出类似的请求,我很快就积累了更多的内存500MB的内存。
这是否意味着我只需要为我的Heroku实例分配更多的内存,或者是否有其他减少这种情况的内存的方法?
答案 0 :(得分:2)
您应该尝试使用pluck
而不是select
,它不会给您对象,只是数组中的字段。那应该有助于您的记忆状况。 Check out the docs for more info。