Boost molto scarso: prestazioni lexical_cast

Windows XP SP3. Core 2 Duo 2.0 GHz. Sto riscontrando che le prestazioni di boost :: lexical_cast sono estremamente lente. Volevo scoprire modi per accelerare il codice. Usando le ottimizzazioni di / O2 su Visual c ++ 2008 e confrontando con java 1.6 e python 2.6.2 vedo i seguenti risultati.

Casting intero:

c++: std::string s ; for(int i = 0; i < 10000000; ++i) { s = boost::lexical_cast(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) 

Le volte che sto vedendo sono

c ++: 6700 millisecondi

java: 1178 millisecondi

    python: 6702 millisecondi

    c ++ è lento come Python e 6 volte più lento di Java.

    Doppio casting:

     c++: std::string s ; for(int i = 0; i < 10000000; ++i) { s = boost::lexical_cast(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) 

    Le volte che sto vedendo sono

    c ++: 56129 millisecondi

    java: 2852 millisecondi

    python: 30780 millisecondi

    Quindi per i doppi c ++ è in realtà la metà della velocità di Python e 20 volte più lento rispetto alla soluzione java !!. Qualche idea sul miglioramento della spinta :: performance lexical_cast? Questo deriva dalla scarsa implementazione della stringstream o possiamo aspettarci una riduzione generale delle prestazioni di 10 volte dall’uso delle librerie di boost.