Считать строку входа быстрее, чем fgets?

Это только локально поврежденное состояние, верно? Вы должны быть в состоянии исправить это с помощью нотариуса server.example.com/test1.

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

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

Также, пожалуйста, убедитесь, что настроили DNS и сделали запись хоста в файле хоста.


Для целей политики подписи UCP, настроенной через раздел «Доверие к контенту» в настройках администратора, необходимо, чтобы мы могли идентифицировать изображение, подписанное членом организации UCP. Мы делаем это, используя клиентские пакеты, которые вы можете загрузить для своей учетной записи пользователя из UCP. Пакеты клиента содержат файл «cert.pem», представляющий собой сертификат x509, подписанный центром сертификации UCP, и файл «key.pem», представляющий собой закрытый ключ, сопоставленный с сертификатом.

Вам необходимо создать делегирование «цели / релизы» и еще одну делегацию, например, «Target / my_user» и добавить «cert.pem» в качестве открытого ключа подписи для обоих. Когда другая служба затем проверяет данные доверия, они могут определить, что сертификат принадлежит члену организации UCP, и их подписи должны быть доверенными. Затем вам нужно импортировать key.pem, чтобы он был доступен для подписи при нажатии.

Документация 23 предоставляет больше информации и специальных команд для выполнения, в частности, раздел «Инициализация репо».

11
задан dreamlax 9 April 2009 в 01:24
поделиться

8 ответов

Вы не говорите, на какой платформе вы находитесь, но если она похожа на UNIX, вы можете попробовать системный вызов read (), который не выполняет дополнительный слой буферизации, который делают fgets () и др. Это может немного ускорить процесс, с другой стороны, это может замедлить ход событий - единственный способ узнать это - попробовать и посмотреть.

7
ответ дан 3 December 2019 в 05:14
поделиться
  1. Используйте fgets_unlocked (), но внимательно прочитайте, что это делает первым

  2. Получить данные с помощью fgetc () или fgetc_unlocked () вместо fgets (). С помощью функции fgets () ваши данные дважды копируются в память, сначала библиотекой времени выполнения C из файла во внутренний буфер (потоковый ввод-вывод буферизуется), затем из этого внутреннего буфера в массив вашей программы

4
ответ дан 3 December 2019 в 05:14
поделиться

Считать весь файл за один раз в буфер.

Обработать строки из этого буфера.

Это самое быстрое решение.

4
ответ дан 3 December 2019 в 05:14
поделиться

Вы можете попытаться минимизировать количество времени, которое вы тратите на чтение с диска, читая большие объемы данных в ОЗУ, а затем работая на что. Чтение с диска медленное, поэтому минимизируйте количество времени, которое вы тратите на это, читая (в идеале) весь файл, а затем работая над ним.

Сортировка как способ кеширования ЦП минимизирует время, которое ЦП фактически возвращает к ОЗУ Вы можете использовать оперативную память, чтобы минимизировать количество обращений к диску.

3
ответ дан 3 December 2019 в 05:14
поделиться

В зависимости от вашей среды, использование setvbuf () для увеличения размера внутреннего буфера, используемого файловыми потоками, может или может быть не улучшать производительность.

Это синтаксис -

setvbuf (InputFile, NULL, _IOFBF, BUFFER_SIZE);

Где InputFile - это FILE * для файла, только что открытого с помощью fopen (), а BUFFER_SIZE - размер буфера (который выделяется этим вызовом для вас).

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

2
ответ дан 3 December 2019 в 05:14
поделиться

Если данные поступают с диска, вы можете быть привязаны к IO.

Если это так, получите более быстрый диск (но сначала убедитесь, что вы максимально эффективно используете свой существующий ... некоторые дистрибутивы Linux не оптимизируют доступ к диску "из коробки" ( hdparm )), заблаговременно разместите данные в памяти (скажем, скопировав их на диск RAM) или будьте готовы ждать.


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

Это немного вне моей компетенции, поэтому вам следует немного почитать или подождать более знающей помощи.

КСТАТИ - Возможно, вы получаете больше работы, чем стоит проблема; может быть, более быстрая машина решит все ваши проблемы ...

NB-- Не ясно, что вы также можете отобразить стандартный ввод в память ...

2
ответ дан 3 December 2019 в 05:14
поделиться

Если ОС поддерживает это, вы можете попробовать асинхронное чтение файла, то есть файл будет считан в память, пока ЦП занят чем-то другим. Итак, код выглядит примерно так:

start asynchronous read
loop:
  wait for asynchronous read to complete
  if end of file goto exit
  start asynchronous read
  do stuff with data read from file
  goto loop
exit:

Если у вас более одного ЦП, то один ЦП читает файл и разбирает данные на строки, а другой ЦП берет каждую строку и обрабатывает ее.

0
ответ дан 3 December 2019 в 05:14
поделиться

Загляните в fread (). Для меня он читается намного быстрее, особенно если буфер для fread установлен на 65536. Минусы: вам нужно проделать много работы и по существу написать свою собственную функцию getline для преобразования из двоичного чтения в текст. Проверьте: ввод-вывод файла

0
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: