Я хотел добавить что-то новое из-за следующего:
На первом attemp я не смог бить
std::ostringstream
operator<<
, но с большим количеством попыток я смог сделать StringBuilder быстрее в некоторых случаях.
Каждый раз, когда я добавляю строку, я просто храню ссылку на нее где-то и увеличиваю счетчик общего размера.
Реальный путь, который я, наконец, внедрил (Horror!), - использовать непрозрачный буфер (std :: vector & lt; char>):
для байта [ ]
для перемещенных строк ( строки, добавленные с помощью std::move
)
std::string
(у нас есть право собственности) для строк
std::string
(без права собственности) Существует также небольшая оптимизация, если последняя вставленная строка была включена, она проверяет свободные зарезервированные, но неиспользуемые байты и хранит там дополнительные байты вместо использования непрозрачного буфера (это чтобы сохранить некоторую память, она фактически делает он немного медленнее, возможно, зависит также от процессора, и он i s / g22]
Это было, наконец, немного быстрее, чем std::ostringstream
, но оно имеет несколько недостатков:
ostringstream
заключение? использовать std::ostringstream
Это уже исправление самого большого узкого места, в то время как удержание нескольких% очков в скорости с реализацией шахты не стоит недостатков.
Если следующая строка не имеет ->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();