Windows XP SP3. Core 2 Duo 2.0 ГГц. Я считаю, что производительность boost: lexical_cast очень медленная. Хотел выяснить способы ускорения кода. Использование /O 2 оптимизации на Visual С++ 2008 и сравнение с java 1.6 и python 2.6.2 Я вижу следующие результаты.
Целочисленное кастинг:
c++:
std::string s ;
for(int i = 0; i < 10000000; ++i)
{
s = boost::lexical_cast<string>(i);
}
java:
String s = new String();
for(int i = 0; i < 10000000; ++i)
{
s = new Integer(i).toString();
}
python:
for i in xrange(1,10000000):
s = str(i)
Время, которое я вижу,
С++: 6700 миллисекунд
java: 1178 миллисекунд
python: 6702 миллисекунды
С++ медленнее, чем python, и в 6 раз медленнее, чем java.
Двойное кастинг:
c++:
std::string s ;
for(int i = 0; i < 10000000; ++i)
{
s = boost::lexical_cast<string>(d);
}
java:
String s = new String();
for(int i = 0; i < 10000000; ++i)
{
double d = i*1.0;
s = new Double(d).toString();
}
python:
for i in xrange(1,10000000):
d = i*1.0
s = str(d)
Время, которое я вижу,
С++: 56129 миллисекунд
java: 2852 миллисекунды
python: 30780 миллисекунд
Итак, для удвоений С++ на самом деле половина скорости python и в 20 раз медленнее, чем java-решение!!. Любые идеи по улучшению производительности boost: lexical_cast? Оказывается ли это из-за плохой строковой реализации, или мы можем ожидать, что общее снижение производительности на 10 раз связано с использованием библиотек повышения.