Я пытаюсь получить модель через make ID, но я не могу работать

Я хотел добавить что-то новое из-за следующего:

На первом attemp я не смог бить

std::ostringstream operator<<

, но с большим количеством попыток я смог сделать StringBuilder быстрее в некоторых случаях.

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

Реальный путь, который я, наконец, внедрил (Horror!), - использовать непрозрачный буфер (std :: vector & lt; char>):

  • 1 байтовый заголовок (2 бит, чтобы указать, следующие ли следующие данные: перемещенная строка, строка или байт [])
  • 6 бит, чтобы рассчитать длину байта []

для байта [ ]

  • Я храню непосредственно байты коротких строк (для доступа к последовательной памяти)

для перемещенных строк ( строки, добавленные с помощью std::move)

  • Указатель на объект std::string (у нас есть право собственности)
  • устанавливает флаг в классе, если там используются неиспользуемые зарезервированные байты

для строк

  • Указатель на объект std::string (без права собственности)

Существует также небольшая оптимизация, если последняя вставленная строка была включена, она проверяет свободные зарезервированные, но неиспользуемые байты и хранит там дополнительные байты вместо использования непрозрачного буфера (это чтобы сохранить некоторую память, она фактически делает он немного медленнее, возможно, зависит также от процессора, и он i s / g22]

Это было, наконец, немного быстрее, чем std::ostringstream, но оно имеет несколько недостатков:

  • Я предположил, что фиксированные длины char типов ( так что 1,2 или 4 байта, не подходит для UTF8), я не говорю, что это не сработает для UTF8. Просто я не проверял его на лень.
  • Я использовал плохую практику кодирования (непрозрачный буфер, легко сделать его не переносимым, я считаю, что мой переносится, кстати)
  • Не хватает всех функций ostringstream
  • Если какая-то ссылочная строка удаляется до слияния всех строк : неопределенное поведение.

заключение? использовать std::ostringstream

Это уже исправление самого большого узкого места, в то время как удержание нескольких% очков в скорости с реализацией шахты не стоит недостатков.

-3
задан James Z 18 January 2019 в 15:36
поделиться

1 ответ

Если следующая строка не имеет ->get() в конце, как показано ниже? (См. документы )

$model = DB::select("select idx, modelName from `model` where makeIdx = '".$maker."' order by modelName ")->get();

В идеале, вы бы рефакторинг как:

$users = DB::table('model')
    ->select('idx', 'modelName')
    ->where('makeIdx', $maker)
    ->orderBy('modelName')
    ->get();
0
ответ дан Kurucu 18 January 2019 в 15:36
поделиться
Другие вопросы по тегам:

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