From 318e9d7e76c8b52a367a38e446fcacfdfd0b36e0 Mon Sep 17 00:00:00 2001 From: Mateusz Charytoniuk Date: Wed, 14 Mar 2018 19:53:18 +0100 Subject: [PATCH] Import CSV rows one at a time (#3450) Credit @mcharytoniuk. While importing over 250k records ImportModel kept running into various problems. One of them was too big memory usage - `ImportModel` loaded the complete file upfront (`$reader->fetchAll()`). Simple one-line change to `$reader->fetch()` makes `ImportModel` import CSV file row-by-row and returning an iterator which limits memory usage and allows data to be imported. This change optimizes memory usage and allows much simpler importing of larger files. --- modules/backend/models/ImportModel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/backend/models/ImportModel.php b/modules/backend/models/ImportModel.php index 55f6512ad..83ac38928 100644 --- a/modules/backend/models/ImportModel.php +++ b/modules/backend/models/ImportModel.php @@ -142,7 +142,7 @@ abstract class ImportModel extends Model } $result = []; - $contents = $reader->fetchAll(); + $contents = $reader->fetch(); foreach ($contents as $row) { $result[] = $this->processImportRow($row, $matches); }