Има два начина за конвертиране на всякакви основни данни в низ.
- std::to_string
- std::ostringstream
- boost::lexical_cast
В тази публикация ще анализирам кой е най-бързият за конвертиране на фундаментални данни в низ. Използвам google benchmark за измерване на часовата разлика. Във всички диаграми оста y е времето в нано секунди, а оста x е както реално време, така и процесорно време.
- type=int input_count = 1
Само за едно преобразуване, както std::stringstream, така и std::ostringstream отнемат почти едно и също време. boost::lexical_cast най-бързо. И std::to_string е между тях.
2. type=int input_count › 30
Тук и std::stringstream, и std::ostringstream превъзхождат std::to_string и boost::lexical_cast. Можете да получите по-добър резултат, като използвате повторно std::stringstream и std::ostringstream буфер.
std::ostringstream oss; oss.str(“”); oss.clear();
Създаването на поточни обекти е много скъпо. Така че повторното използване на буфер дава по-добър резултат.
3. type=double input_count=1
Производителността е много подобна на цяло число. Boost lexical_cast превъзхожда всички.
3. type=double input_count=30
За множество входове, boost::lexical_cast превъзхожда всички останали.
И така моите наблюдения са
- Винаги използвайте std::to_string, за да конвертирате всяка отделна стойност в std::string.
- В случай на двойно, използвайте std::string. Ако имате нужда от точност, използвайте std::ostringstream.
- Във всички останали случаи използвайте std::ostringstream.
- Предпочитайте boost::lexical_cast, ако имате boost в проекта си
Получено изображение: https://github.com/asit-dhal/BenchmarkViewer