что быстрее читать, ASCII или Binary? - PullRequest
3 голосов
/ 28 марта 2011

В настоящее время я работаю над проектом C ++, включающим чтение тысяч небольших текстовых файлов (~ 20 КБ) в формате ASCII.

Смогу ли я получить значительное улучшение производительности, преобразовав всефайлов в двоичный файл перед их анализом?

Ответы [ 5 ]

11 голосов
/ 28 марта 2011

Преобразование строки в число, хотя и недешево в циклах процессора, не является проблемой.Объем накладных расходов, связанных с вводом / выводом, всегда на порядки больше, чем преобразование.Размер файла не так уж и важен, диск занимает 8 КБ примерно с 20 КБ, все это из одного кластера на одной дорожке.Наличие тысяч файлов - это большая проблема, открытие файла включает в себя перемещение головки устройства чтения дисков, и это занимает вечность.

Так что сосредоточьтесь на сокращении количества файлов для реальной выгоды.1005 *

6 голосов
/ 28 марта 2011

Нет реальной разницы между "ASCII" и "Binary", если вы обрабатываете текст.ASCII - это интерпретация двоичных данных как текста.Поэтому, если я правильно понимаю ваш вопрос, ответ будет отрицательным, невозможно преобразование и улучшение производительности.

3 голосов
/ 28 марта 2011

Хранение данных в двоичном формате имеет два преимущества:

  • занимает меньше памяти (меньше дискового ввода-вывода)
  • это быстрее для чтения (не занимает много времени анализ строки)

Таким образом, произойдет улучшение производительности, если вы преобразуете свое текстовое представление в плотно упакованный двоичный формат, но если они значимы , это зависит от вашей конкретной ситуации.

Если потоковая передача данных является уже узким местом производительности, переключение на двоичный формат (и, возможно, даже сжатый - чтение с дисков по своей сути медленное) может принести много.

0 голосов
/ 28 марта 2011

Вы можете получить выигрыш в производительности при загрузке, когда двоичный формат таков, что вы, следовательно, минимизируете любые требования для разбора. Например, когда содержимое может быть выгружено большими кусками, которые отображаются непосредственно в «структурный дамп». Каждый последующий шаг в свою очередь может стоить вам производительности. Будет ли это в конечном итоге намного опережать ASCII, будет частично зависеть от того, насколько сложным / неэффективным будет ASCII, с которого начинать.

Шаги, которые стоят вам даже в двоичном формате, включают:

  • Сжатие
  • Независимость от платформы
  • Переменное содержимое
  • Изменения содержимого, требующие обновления двоичного файла из ASCII

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

0 голосов
/ 28 марта 2011

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

...