Будь осторожен. Есть много эффектов для рассмотрения.
Что касается обработки строки (или того, что вы делаете с файлом), то, скорее всего, нет разницы в производительности между выполнением этого из памяти и построчным выполнением файла при условии разумной буферизации файла.
На самом деле вызов вашей операционной системы для чтения низкого уровня ОЧЕНЬ дорог. Вот почему мы буферизовали ввод / вывод. Для небольших размеров ввода / вывода преобладают издержки вызова. Таким образом, чтение 64 байтов за раз, вероятно, на 1/4 так же эффективно, как чтение 256 байтов за раз. (И я говорю здесь о read (), а не о fgets () или fread (), которые оба буферизируются.)
В определенный момент время, необходимое для физического ввода-вывода, начинает доминировать, и когда производительность при увеличении размера буфера не увеличивается, вы нашли размер буфера. Очень старая точка данных: 7 МГц Amiga 500, жесткий диск SCSI 100 МБ (A590 + Quantum): моя производительность ввода-вывода действительно достигла максимума только при размере буфера 256 КБ. По сравнению с процессором этот диск был БЫСТРОМ !!! (На компьютере было всего 3 МБ ОЗУ. 256 КБ - БОЛЬШОЙ буфер!)
Однако вы можете получить слишком много хорошего. Как только ваш файл находится в памяти, ОС может вывести этот файл обратно на диск на досуге. И если это так, вы потеряли какую-либо выгоду от буферизации. Если вы сделаете свои буферы слишком большими, это может произойти при определенных ситуациях нагрузки, и ваша производительность ухудшится. Поэтому внимательно изучите среду выполнения и при необходимости ограничьте объем памяти.
Альтернативой является использование mmap () для отображения файла в памяти. Теперь ОС не будет выгружать ваш файл - скорее, она просто не будет перелистывать страницу, или, если ей понадобится память, она будет отбрасывать любые части файла, кэшированные в ядре. Но ему не нужно ничего писать, чтобы поменять место - у него есть доступный файл. Однако я не уверен, приведет ли это к повышению производительности, поскольку все еще лучше выполнять ввод-вывод большими блоками, а виртуальная память имеет тенденцию перемещать вещи в блоках размером с страницу. Некоторые менеджеры памяти могут неплохо выполнять перемещение страниц по частям, чтобы увеличить пропускную способность ввода-вывода и предварительную выборку страниц. Но я на самом деле не изучал это подробно.
Сначала заставьте вашу программу работать правильно. Затем оптимизируйте.