Если работаешь с большими файлами, то по-любому рано или поздно встанет вопрос об индексах.
Бывает крайне полезно добить пробелами все строки до одинаковой длины (по размеру наибольшей из них), чтобы потом можно было вытащить $i-ю строку через
PHP:
fseek($fp, ($i-1)*RAZMER_STROKI);
$str = fread($fp,RAZMER_STROKI);
$str = rtrim($str); // убираем паддинг
Также стоит посмотреть, по каким признакам ты из этого файла отбираешь строки, и сделать другой файл, в котором будут просто номера строк. Напимер так:
строки, начинающиеся с двух пробелов: 21,146,191,193
строки, содержащие 'vova': 21,22,27,...
строки максимальной длины: 150,271..
Короче понаходить их ЗАРАНЕЕ, сохранить их номера себе куда-нибудь (а хоть и в массивчик прямо в коде забить), и потом уже выдергивать по номерам, как в примере выше, а не лопатить весь файл.
Судя по симптомам, у тебя тормоза именно из-за больших объемов данных в памяти. Следи, какого размера у тебя получаются массивы, не дублируешь ли ты содержимое файла по нескольку раз (допустим, прочитал в строку, тут же по строке построил массив, а потом этот массив еще и скопировал куда-то), не слишком ли долгие foreach()..
Именно это важно, а не копеечный бонус от использования одинарных кавычек вместо двойных. Выполнялась у тебя инкрементация неинициализированной переменной за 0.00001 секунду, после инициализации стало 0.000001 (быстрее на порядок!!!). Смешно..