Tres preguntas sobre hacer un montón de cálculos

Esta es sólo una serie de preguntas con respecto a hacer un montón de cálculos. O bien no pude encontrar las respuestas en línea o aún necesito aclaraciones.

  1. ¿Es más rápido pasar (float, float, float) como parámetros de método vs (float[]) donde la matriz tiene tres términos?

  2. ¿Es más rápido para un método devolver un float[] vs establecer el contenido de un float[] que se pasa al método como un argumento?

  3. ¿Es más rápido reemplazar las llamadas de método con los cálculos reales, es decir, en lugar de es A=sum(B,C) más lenta que A=B+C ? Suponiendo sum(x,y){return x+y}

EDITAR:

Gracias por todas las respuestas, chicos! Antes de cerrar este hilo tengo una pregunta más rápida si alguien sabe:

  1. Si estoy usando una clase para calcular repetidamente las mismas estadísticas una y otra vez (y luego tirarlas), ¿sería mejor crear variables de instancia que actúen como contenedores para evitar una repetición y una desasignación continuas?

¿Es más rápido pasar (float, float, float) como parámetros de método vs (float[]) donde la matriz tiene tres términos?

Eso depende. Si ya tiene la matriz de flotadores a mano, no debería hacer ninguna diferencia en absoluto. Si está construyendo la matriz cada vez, eso llevaría algún tiempo para las asignaciones a la matriz, y posiblemente algún tiempo para la construcción de la matriz.

¿Importa? Si lo haces en un bucle cerrado que se ejecuta unos millones de veces en sucesión, y que muchas veces durante la vida de su aplicación, sin duda puede hacer.

¿Es más rápido para un método devolver un flotante [] vs establecer el contenido de un flotador [] que se pasa al método como un argumento?

Si necesita construir la matriz de float cada vez para su valor de retorno, que ciertamente no va a ser más rápido que la configuración de valores en una matriz pre-existente. Simplemente porque ambas opciones implican establecer valores, y uno de ellos tiene la tarea adicional de crear una nueva matriz. Pero crear una nueva matriz puede ser muy, muy rápido.

Aún así, si lo haces muchos millones de veces en tu aplicación en rápida sucesión, compara con ella, puede ahorrarte un tiempo.

¿Es más rápido reemplazar las llamadas de método con los cálculos reales, es decir, en lugar de es A=sum(B,C) más lenta que A=B+C ? Suponiendo sum(x,y){return x+y}

Casi imposible de decir. El optimizador de código HotSpot incorporado es bastante bueno en descubrir tales cosas y optimizar eso para su.

Si lo comparas, intenta hacer private método sum , lo que facilitará que HotSpot decida que puede estar en línea (aunque también lo descubrirá por sí mismo, si no tienes implementaciones sobrepuestas del método de sum )


La única cosa sobre benchmarking aquí es:

Puede ayudar a su aplicación ahora, con la versión actual de la VM que está utilizando (y su base de código actual). Si decide actualizar a una nueva versión de la VM, puede descubrir que las características de rendimiento cambian y es posible que deba volver a optimizarla.

Así que sólo lo hacen si realmente importa a su aplicación, de lo contrario puede ser un esfuerzo desperdiciado.

Es mejor concentrarse primero en su algoritmo y en sus complejidades espaciales y temporales; Cualquier ganancia hay ganancias para siempre.

1) ¿Es más rápido pasar (flotar, flotar, flotar) como parámetros de método vs (float []) donde la matriz tiene tres términos?

1.) Depende. Si los flotadores separados no son contiguos en la memoria entonces un float [] podría ayudar.

2) ¿Es más rápido para un método devolver un flotante [] vs establecer el contenido de un flotador [] que se pasa al método como un argumento?

2.) Depende de si el flotador [] ya existe en ambos casos. Si está creando un nuevo float [] y lo pasa, o crea un nuevo float [] y lo devuelve, el costo es el mismo. Pero si en cualquier caso se puede utilizar un flotante existente [] de alguna manera, que será más rápido y crear menos asignaciones.

3) ¿Es más rápido reemplazar las llamadas de método con los cálculos reales, es decir, en lugar de A = suma (B, C) más lenta que A = B + C? Suponiendo suma (x, y) {return x + y}

3.) No estoy seguro, soy más de un programador C #. Sé que en CLR básico (common language runtime) como utilizado por la Xbox 360 cuando se ejecuta C #, los cálculos manuales eran mucho más baratos que el uso de métodos sobrecargados. No estoy seguro si Java tiene problemas similares en cualquier plataforma.

  • Responder a llamadas de teléfono Android de PC por bluetooth
  • Intercambio compartido de iPhone y Android de Crossplatform
  • Cómo iniciar la pantalla de inicio mediante programación en Android
  • Android - ¿qué es cola de mensajes encuesta nativa una vez en android?
  • Prácticas recomendadas para la implementación de Android onClickListener
  • RxJava: Averigüe si BehaviorSubject fue un valor repetido o no
  • Obtención de la API de Preferencias en Android y PC
  • Android (Java) los recursos de programación de red
  • Convertir una cadena en una clase
  • BaseGameUtils GoogleApiClient.ApiOptions no se puede resolver con un tipo
  • ¿Cuáles son los posibles problemas de rendimiento en el uso de python over java para el desarrollo de aplicaciones para Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.