Android java: OutOfMemory при вставке огромного списка в базу данных SQL
Я просто работаю над проектом Android, где используется ORM greendao. Это позволяет мне добавлять несколько объектов (которые, очевидно, являются объектами) в базу данных одновременно (за одну транзакцию). На практике есть метод
insertOrReplaceInTx (...)
который принимает в качестве параметра коллекцию, учитывая список объектов. Проблема в том, что мой список содержит 12000 объектов, и время от времени вставка приводит к исключению OutOfMemory. Я думаю об умном способе решить проблему и предотвратить будущее ООМ. Единственная идея, которая приходит мне в голову, - это разбить огромную коллекцию на подколлекции (скажем, по 500 элементов в каждой) и зафиксировать в цикле, делая несколько небольших коммитов вместо одного огромного. Плохая вещь в том, что для вставки записей требуется больше времени, а время здесь имеет значение. В конце концов, я не уверен, что выполнение коммита после коммита все равно не убивает кучу. Возможно, вызовите метод sleep () между ними, чтобы GC очистил кучу ... но это выглядит для меня как некрасивое решение.
какие-нибудь умные идеи на вашей стороне? заранее спасибо