domingo, 17 de julio de 2011

Curso de programación: Capítulo 3. Consejos de optimización


Hola a todos,

El capitulo de programación de hoy proviene de un fallo que yo mismo he cometido en el desarrollo del game engine y que me ha recordado lo facil que es irse por las ramas cuando se habla de optimización.

Este capitulo está orientado para los novatos en programación, los que tengais mas experiencia leedlo si quereis, pero seguramente ya lo habreís experimentado en vuestras carnes.

Uno de los fenomenos más usuales que les pasa a los novatos es que cuando su aplicación tiene problemas de rendimientos intentan buscar la solución más dificil y enrevesada posible para mejorar el rendimiento.

El ensamblador es útil?? Si, lo es, pero solo se puede aplicar al final de la implentación, cuando no va a haber más cambios.

Los algoritmos complicados son útiles?? Si, pero solo cuando son neesarios.

Con esto quiero decir que normalmente la solución más facil es la mejor (al menos para nuestros propositos). Mi consejo es que no programeis pensando en el rendimiento hasta que el rendimiento no sea un problema, programad pensando en el mantenimiento, ya que si vuestro código no es mantenible, da igual cuan optimizado esté, no se podrá seguir mejorando.

Y para muestra un botón...

Ejecución lenta:


Ejecución rapida:

Cual es la única diferencia? Pues bien, la única cosa que se ha cambiado es que en el segundo caso no pinte los gráficos que estén fuera de la pantalla. A efectos prácticos 4 lineas de código que hacen que la aplicación vaya al doble de velocidad. Si mi código fuera "óptimo" en vez de "mantenible" este cambio tal vez me habría costado cientos de lineas y tal vez no habría dado los mismos resultados.

Espero que os haya servido y que hayaís aprendido algo. Recordad, dudas, sugerencias, para eso estamos.

Nos vemos
LordPakusBlog

2 comentarios :

  1. Esto es lo del frustrum culling? Se llama igual en 2D que en 3D? Yo uso la librería clipper, que me lo hace todo directamente, es una buena solución? Hay de mejores?
    Lo siento por tantas preguntas xDD, pero es que es un tema que pasamos muy por encima y la verdad es que entre esto y tener varias lowPoly de las meshes el rendimiento aumento una barbaridad.

    Gracias!!!

    ResponderEliminar
  2. Yo lo conozco como clipping (no pintar lo que no está dentro del marco de la pantalla) aunque si, conceptualmente es el frustrum culling aplicado a 2D (en la aplicación es bastante más complicado el 3D )

    La libreria clipper no la conozco, tampoco creo que haga falta ninguna para implementar esto, pero no soy nadie para decirlo, tal vez haya alguien más que pueda dar su opinión.

    Respecto al aumento de rendimiento es bastante obvio. La mayoria de las mejoras de rendimiento se consiguen con pequeños cambios sencillos de implementar que nos pasan por delante sin que los veamos.

    Nos vemos

    ResponderEliminar

Entradas populares