Antes de leer la pregunta:
Esta pregunta no es acerca de cuán útil es usar dynamic_cast
. Es solo su rendimiento.Rendimiento de dynamic_cast?
Recientemente he desarrollado un diseño en el que dynamic_cast
se utiliza mucho.
Al hablar de esto con los compañeros de trabajo, casi todos dicen que dynamic_cast
no se debe utilizar debido a su mal rendimiento (estos son compañeros de trabajo que tienen diferentes antecedentes y en algunos casos no se conocen. Estoy trabajando en una gran empresa)
Decidí probar el rendimiento de este método en lugar de solo creerlo. se utilizó
El siguiente código:
ptime firstValue(microsec_clock::local_time());
ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject);
ptime secondValue(microsec_clock::local_time());
time_duration diff = secondValue - firstValue;
std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl;
El código anterior utiliza métodos de boost::date_time
en Linux para obtener valores utilizables.
He hecho 3 dynamic_cast
en una ejecución, el código para medirlos es el mismo.
Los resultados de 1 ejecución fueron los siguientes:
CAST1 dura: 74 microsec
CAST2 dura: 2 microsec
Cast3 dura: 1 microsec
La primera fundido siempre se 74-111 microsegundos, la siguiente los moldes en la misma ejecución tomaron 1-3 microsec.
Así que finalmente mis preguntas:
¿dynamic_cast
realmente está teniendo problemas?
De acuerdo con el testresults no es. ¿Mi código de prueba es correcto?
¿Por qué tantos desarrolladores piensan que es lento si no lo es?
¿Echo de menos algo? No puedo ver ningún código para cast2 o cast3. – Flexo
¿Quién puede decir qué es malo? ¿Tu programa funciona lo suficientemente bien? Si es así, entonces el rendimiento no es malo. ¿El tiempo total en dinámica arroja un gran porcentaje de su tiempo de ejecución? Si no, entonces preocúpate por otras cosas primero. En términos más generales, 74 microsegundos es terriblemente lento para algunas aplicaciones: en mi último trabajo, habría recibido y analizado un registro de actualización completo de la bolsa de valores, actualizado la base de datos y se lo conté a las aplicaciones cliente en la mitad del tiempo. Si le interesa, compárelo con otras formas de obtener el mismo comportamiento. –
Tener un montón de dynamic_casts en el código es un indicador seguro de los problemas de diseño. –