Я не знаю, почему это работает, но вам придется
chromedriver.exe
к вашему решению, щелкнув правой кнопкой мыши и выбрав добавить существующее. Вот и все. Это должно работать.
Ах, на основании вашего редактирования вы были укушены буфером чтения заголовка. Вы не можете протестировать две программы, которые читают файлы рядом, запустив их один раз. Первый всегда медленнее, так как файл находится на диске, как только файл находится в памяти, второй будет работать быстрее, вы должны либо создать новые данные для каждого, либо запустить один, а затем запустить оба, чтобы они оба получили преимущество буфера readahead.
В 2017 году csv полностью указан - RFC 4180.
Это очень распространенная спецификация, полностью охватываемая многими библиотеками (пример ).
Просто используйте любую легкодоступную библиотеку csv - то есть RFC 4180.
На самом деле есть спецификация для формата CSV и способ обработки запятых:
Поля, содержащие разрывы строк (CRLF), double кавычки и запятые должны быть заключены в двойные кавычки.
http://tools.ietf.org/html/rfc4180
Таким образом, чтобы иметь значения foo
и bar, baz
, вы делаете это:
foo,"bar,baz"
Еще одно важное требование для рассмотрения (также из спецификации):
- 121 --- 1802901--Если двойные кавычки используются для включения полей, то двойные кавычки появляться внутри поля необходимо экранировать, предшествуя ему еще одна двойная цитата. Например:
«aaa», «b», «bb», «ccc»
Начните с файла, содержащего нисходящие числа от максимально интересующего вас максимума:
7 6 5 4 3 2 1
Затем ... это работает только до 9999
#!/bin/sh
MAX_NUM=9999
if [ ! -e descendingnumbers.txt ]; then
seq -f%04.0f -s\ $MAX_NUM -1 1 > descendingnumbers.txt
fi
tail descendingnumbers.txt -c $[5 * $1]
- 121 --- 2227188-- Исследуйте mmap (2).
Вы будете отбрасывать тонкости ftell / fread, но он пропустит слой косвенности, если пропускная способность чтения действительно важна.
Возможно, вы скомпилировали без оптимизации (или без такой высокой настройки оптимизации)?
Также ваш код вызовет sysWriteBuffer
один раз с readBytes
равным нулю - может, это (частично) объясняет это?
Вы также можете встроить sysWriteBuffer (либо с помощью переключателя компилятора, либо вручную). ] «встраивание» означает копирование тела функции на сайт вызова с целью устранения накладных расходов на вызов функции. Иногда компиляторы делают это автоматически (я думаю, что -O3 включает эту оптимизацию в gcc). Вы также можете использовать ключевое слово inline
в gcc , чтобы указать компилятору встроить функцию. Если вы сделаете это, ваша декларация будет выглядеть так:
static inline int sysWriteBuffer(int fdout, char *buffer, ssize_t readBytes) {
....
Без сравнения исходных кодов сложно сказать. Если вы сравниваете свою кошку с GNU cat, помните, что вы сравниваете код, которому несколько часов / дней, с кодом, который развивался более двадцати лет.
Возможно, вы захотите провести более полный анализ производительности, запуск обеих программ с разными размерами ввода, с разных устройств (неплохо было бы использовать RAM-диск) и несколько раз подряд. Вы должны попытаться определить, ГДЕ в вашей программе медленнее.
Так как cat сама по себе тривиальна (и вы сказали в комментарии, что уже оптимизируете компиляцию), я уверен, что влияние на производительность, которое вы наблюдаете, отсутствует в фактический алгоритм, но на время загрузки программы. Если двоичный файл системы предварительно связан (что является распространенным в большинстве дистрибутивов в настоящее время),
Сколько? Канонический кот - что-то вроде
char bufr[BUFSIZ];
ssize_t len;
while((len=read(fdin, bufr, BUFSIZ)) >0)
write(fdout, bufr, len);
, который сохраняет несколько инструкций.
Вы сравнивали strace
с обоих? Вы можете попробовать использовать параметр -tt
, чтобы получить время системных вызовов.