Mi objetivo es encontrar la biblioteca más rápida de C++ para convertir int en cadena, viceversa, y analizar.Alto rendimiento latencia baja C++ cadena personalizada clase
Cualquiera que haya experimentado con el rendimiento de C++ se dará cuenta rápidamente de que la clase de cadena de STL tiene un rendimiento terrible en comparación con las operaciones aritméticas de STL int.
Algunos puntos de referencia de la muestra de mi 3.3 GHz Intel, GCC, CentOS 5,5 máquina:
memcpy 0.004000 microsec/op
atoi 0.025000 microsec/op
atof 0.133000 microsec/op
strtod 0.133000 microsec/op
atof 0.135108 microsec/op
(char) uchar 0.001801 microsec/op
(char) ushort 0.001801 microsec/op
cache accs 0.010505 microsec/op
maplookup 0.128534 microsec/op
add_int 0.002456 microsec/op
puede ver rápidamente que las operaciones de cadena se convertirá en un cuello de botella para las aplicaciones de mensajería de alta velocidad.
He localizado otras librerías para cadenas de alto rendimiento (enumeradas), pero estoy escribiendo esperando que alguien haya tenido una dificultad similar y haya encontrado alguna solución, incluyendo posiblemente escribir su propia clase de cadena.
- http://bstring.sourceforge.net/
- http://code.google.com/p/stringencoders/
- http://www.and.org/vstr/comparison
- http://www.boost.org/doc/libs/1_46_1/doc/html/string_algo.html
Bueno, usted ha hecho los puntos de referencia. Pero mi pregunta es: ¿realmente importa optimizar esta clase? ¿Hubo una cantidad significativa (> 20% de tiempo) de tiempo invertido en cadenas reales <-> de conversiones numéricas? Y también, ¿por qué molestarse en enviar los datos numéricos como cadenas? Sería más eficiente simplemente enviarlos en su representación nativa (o una representación intermedia, pero aún numérica) –
¿Tiene usted una aplicación que ha perfilado e identificado una cadena de procesamiento de cuello de botella, o simplemente está suponiendo que podría ser un cuello de botella en alguna aplicación hipotética? –
Creo que encontrará que esto no es realmente un cuello de botella. La latencia de red oscurecerá cualquiera de estos tiempos en varios órdenes de magnitud. –