Estoy en una situación en la que tengo objetos del juego que tienen una función virtual Update(). Hay muchos objetos de juego (actualmente un poco más de 7000) y las llamadas de bucle se actualizan para todos ellos (entre otras cosas). Mi colega sugirió que deberíamos eliminar la función virtual por completo. Como se puede imaginar, esto requerirá mucha refactorización.Costo de una función virtual en un círculo cerrado
He visto this answer pero en mi caso, la creación de perfiles significa que tengo que cambiar una gran cantidad de código. Entonces, antes de siquiera pensar en comenzar, pensé en pedir aquí una opinión sobre si la refacturación vale la pena en este caso.
Tenga en cuenta que he perfilado otras partes del circuito y he estado tratando de optimizar las partes que llevan más tiempo. Sospecho que las llamadas a funciones virtuales en este caso es algo de lo que no debería preocuparme, pero no puedo estar seguro hasta que perfilé y no puedo crear un perfil hasta que cambie el código (que es mucho). También tenga en cuenta que algunas funciones de actualización son muy pequeñas, mientras que otras son más grandes y complejas.
EDIT: Hay varias respuestas que le dan una gran idea, por lo que cualquiera que tropiece con esta pregunta en el futuro, eche un vistazo a todas las respuestas y no solo a la seleccionada.
Según la información que proporcionó, parece que la refabricación podría ser difícil o imposible. La razón es que hay varios tipos diferentes de funciones Update(). Todo lo que obtendrá con la refactorización es que las llamadas a funciones virtuales serán reemplazadas por sentencias switch-case o if, que no son mejores en rendimiento. – tp1
¡Cómo se atreve alguien a preguntar sobre la optimización! : P ... como de costumbre, -1 en este tipo de preguntas sin explicar por qué. De todos modos, gracias a todos los que respondieron. Todo lo que necesitaba para obtener otra opinión, que obtuve. No estoy seguro de por qué algunas personas están empeñadas en enterrar todo y cualquier cosa que incluso tenga la palabra 'optimizar' – Samaursa
Lo mismo aquí. Estoy trabajando en mi propio motor de juego, que actualmente se ejecuta a unos 10 fps en una máquina de primera línea. No estoy seguro de dónde mirar, pero tengo miedo de preguntar. En mi motor estoy usando dos listas, una para todos los objetos (que superan en número a los objetos en vivo en mi sistema - las colisiones no hacen que un objeto esté activo) y uno para los objetos en vivo. – dascandy