Утечка памяти при построении хеша для маркера карт Google - PullRequest
1 голос
/ 20 мая 2019

Я работаю над задачей показать маркеры местоположения на карте Google. В моей таблице около 40 тысяч записей. Мне нужно создать маркер местоположения для всех этих записей. Я использую gem gmaps4rails с моим приложением ruby ​​on rails. Я использую Passenger Standalone в качестве сервера приложений.

Вот мой код

my_models_controller.rb

 def index
   @markers = []
   MyModel.select(:id, :first_name, :latitude,:longitude).find_in_batches do |batch_records|
     @markers += Gmaps4rails.build_markers(batch_records) do |record, marker|
       marker.lat record.latitude
       marker.lng record.longitude
       marker.title record.first_name
       marker.infowindow "<span> #{record.first_name} </span> "
     end
   end
 end

index.html.haml

:javascript
  var markers_json = #{raw @markers.to_json};

%h1

- markers = nil
#my_model_map.map{ style: 'width: 100%; height: 600px;' }

my_model.js

if(typeof Gmaps !== 'undefined' && $('#my_model_map').length) {
    handler = Gmaps.build('Google', { markers: { maxRandomDistance: null } });
    handler.buildMap({ provider: {}, internal: { id: 'my_model_map' } }, function() {
        if(typeof markers_json !== 'undefined') {
            markers = handler.addMarkers(markers_json);
            handler.bounds.extendWith(markers);
            handler.fitMapToBounds();
        }
    });
}

Я попытался выбрать необходимые столбцы и добавил пакетную обработку, чтобы уменьшить потребление памяти. Но это все еще занимает около 200 МБ при создании хэша для маркеров карты Google для всех этих записей.

Проблема здесь в том, что он никогда не освобождает эту память после обработки каждого запроса. И увеличение памяти происходит постепенно. Кто-нибудь может посоветовать мне, какая часть моего кода вызывает утечку памяти?

...