La Web del Programador: Comunidad de Programadores
 
    Pregunta:  48100 - RENDIMIENTO METODOS ESTATICOS
Autor:  Jorge Rivero
Me gustaria saber que repercusiones tiene en un programa el uso de metodos estaticos. Que resulta mejor a modo de rendimiento (velocidad y ocupacion de memoria) crearse un metodo estatico y acceder invocandolo directamente o dinamico y hacer una instancia de la clase?. Que perjuicios a parte de solo poder acceder a variables estaticas tiene utilizar metodos estaticos en cuestion de rendimiento?

Muchisimas gracias.

  Respuesta:  Leo Lobeto
La diferencia en rendimiento entre el acceso a métodos estáticos y métodos de instancia es ínfima. Técnicamente debería haber una pequeña diferencia en favor del acceso estático, ya que no existe la necesidad de crear una instancia de la clase y en cada invocación a un método se pasa un parámetro menos (el parámetro implícito 'this').

En la práctica esta diferencia no es medible. No notarás ningún cambio en la respuesta de una aplicación por haber ahorrado invocaciones dinámicas.

Por otro lado, crear tu modelo de objetos teniendo en cuenta este tipo de detalles de implementación (en lugar de dejar que el compilador o la máquina virtual se ocupen de optimizar tu código) puede llevarte a hacerlo poco entendible e inmantenible, lo que definitivamente te traerá algún perjuicio (pérdida de tiempo o dinero si haces software con fines comerciales) más temprano que tarde.

Por ejemplo, te encontrarás con que quieres extender tu modelo utilizando herencia y no podrás hacer una subclase que sobreescriba el método estático.

Si pretendes mejorar la respuesta de tu sistema haciendo este tipo de cambios en tu modelo existente no verás diferencia alguna, pero habrás tenido que reescribir montones de líneas de código y rehacer tests para probar que todo siga funcionando bien.

En una aplicación sofisticada, el acceso a archivos en el disco, una comunicación por red con otro proceso o una consulta a una base de datos se llevan la mayor parte del tiempo de ejecución. Si tu intención es disminuir el tiempo de respuesta, lo primero sería atacar estos aspectos (¡especialmente la base de datos, si tienes una!).

En un programa sin accesos a disco o a bases de datos muchas veces la mejor forma de mejorar el rendimiento es mejorar los algoritmos y las estructuras de datos que se utilizan. Los ciclos suelen llevarse buena parte de los ciclos de procesador, y muchas veces algo tan simple como obtener un dato al inicio en lugar de calcularlo en cada iteración provoca una diferencia visible. Construir cada estructura teniendo en cuenta cuáles van a ser la operaciones más usada y optimizarla para que responda mejor en el uso más habitual también puede ser una medida efectiva.

Espero que sea de utilidad. Saluos.