Erro de exaustão da memory PHP, código insuficiente ou apenas aumentar o limite de memory?

Estou tentando ler 738627 registros de um arquivo plano para o MySQl. O script parece funcionar bem, mas está me dando os erros de memory acima.

Uma amostra do arquivo é:

#export_dategenre_idapplication_idis_primary #primaryKey:genre_idapplication_id #dbTypes:BIGINTINTEGERINTEGERBOOLEAN #exportMode:FULL 127667880285760002817317350 127667880285760002818261461 127667880285760002825372301 127667880285760002827785570 127667880285760002827930241 127667880285760002827987861 127667880285760002828089791 127667880285760002828168361 127667880285760002828192041 127667880285760002829144541 127667880285760002829351511 

Tentei aumentar a memory permitida usando

 ini_set("memory_limit","80M"); 

e ainda falha. Continuo aumentando isso até que ele seja executado?

O código completo é

  <?php ini_set("memory_limit","80M"); $db = mysql_connect("localhost", "uname", "pword"); // test connection if (!$db) { echo "Couldn't make a connection!"; exit; } // select database if (!mysql_select_db("dbname",$db)) { echo "Couldn't select database!"; exit; } mysql_set_charset('utf8',$db); $delimiter = chr(1); $eoldelimiter = chr(2) . "\n"; $fp = fopen('genre_application','r'); if (!$fp) {echo 'ERROR: Unable to open file.'; exit;} $loop = 0; while (!feof($fp)) { $loop++; $line = stream_get_line($fp,128,$eoldelimiter); //use 2048 if very long lines if ($line[0] === '#') continue; //Skip lines that start with # $field[$loop] = explode ($delimiter, $line); $fp++; $export_date = $field[$loop][0]; $genre_id = $field[$loop][1]; $application_id = $field[$loop][2]; $query = "REPLACE into genre_apps (export_date, genre_id, application_id) VALUES ('$export_date','$genre_id','$application_id')"; print "SQL-Query: ".$query."
"; if(mysql_query($query,$db)) { echo " OK !\n"; } else { echo "Error

"; echo mysql_errno() . ":" . mysql_error() . "
\n"; } } fclose($fp); ?>

Seu loop preenche o $field variável sem motivo (ele escreve para uma célula diferente em cada iteração de loop), usando assim mais memory com cada linha.

Você pode replace:

 $field[$loop] = explode ($delimiter, $line); $export_date = $field[$loop][0]; $genre_id = $field[$loop][1]; $application_id = $field[$loop][2]; 

Com:

 list($export_date, $genre_id, $application_id) = explode($delimiter, $line); 

Para melhorar o desempenho, você pode aproveitar a capacidade de inserir várias linhas usando REPLACE INTO agrupando N linhas em uma única consulta.