readString против readLine - PullRequest
       11

readString против readLine

0 голосов
/ 26 марта 2019

Я пишу приложение для чтения из списка файлов, построчно и выполняю некоторую обработку.Я хочу использовать как можно меньше оперативной памяти.Я сталкивался с этим вопросом https://stackoverflow.com/a/41741702/3531263

, где автор говорит, что readString использует больше оперативной памяти, чем readLine, и они опубликовали некоторый код.Чего я не понимаю, так это как использовать больше оперативной памяти?Поскольку, в конечном счете, способ написания их кода, они все еще записывают целую строку в свой буфер.Разве это не значит, что если бы они только что использовали readString, это было бы то же самое?

Ответы [ 2 ]

4 голосов
/ 26 марта 2019

способ написания их кода, они все еще записывают целую строку в свой буфер

Их код, да. Для вашего кода может не потребоваться, чтобы вся строка находилась в памяти одновременно.Например, ваша программа фильтрует файл журнала по идентификатору запроса, который находится в начале строки.Не нужно читать всю строку, которая может составлять несколько мегабайт или более, только чтобы отклонить ее из-за неправильного идентификатора запроса.Но с ReadString у вас нет выбора роскоши.

2 голосов
/ 26 марта 2019

Я приветствую Серхио. Также взгляните на текущую реализацию в стандартной библиотеке. ReadLine вызывает ReadSlice('\n') один раз, затем пробегает через несколько ветвей, чтобы убедиться, что соответствующие преобразованные значения или ошибки дозорного возвращены. С другой стороны, ReadBytes и ReadString оба выполняют циклическое повторение вызовов на ReadSlice(delim), поэтому из этого следует, что они обязательно скопируют по крайней мере столько данных в память, сколько ReadLine, и потенциально намного больше , если разделитель не найден при первом вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...