2012-03-01 19 views
8

Se sabe que Flash se comporta de maneras muy impredecibles cuando se trata de manipular datos. Tengo curiosidad de que haya algún beneficio de rendimiento/memoria al usar Números en lugar de Ints además de los valores que necesitan precisión. He escuchado que algunas operaciones básicas en Flash pueden convertirse varias veces entre los dos tipos para resolver la expresión. También he escuchado que Flash runtime, bajo el capó, en realidad asigna ints a números/flotantes que no son de precisión durante el tiempo de ejecución. Algo de esto es verdad?¿Las entradas son siempre más rápidas que números/flotantes en AS3?

Respuesta

14

El tiempo de ejecución de Flash es un lugar oscuro.

  • Como mencionó AVM2 does convert big ints into Number.
  • Los números enteros son reales.
  • And there's more stuff about ints.
  • Uints solían ser lentos utilizados en un bucle BUT NOW THEY ARE NOT (los resultados en el artículo parecen ser una combinación de generación de bytecode extraña y optimizaciones de JIT).
  • Los números ocupan más espacio en la memoria, pero esto es nothing en comparación con incluso un solo archivo JPEG.
  • Lógicamente se siente mejor usar uints en bucles.
  • Los números son fallas de punto flotante, tiene que tener cuidado al compararlos.

Jackson Dunstan hace pruebas bastante buenas de diferentes construcciones de lenguaje AS3. Por supuesto, siempre es bueno verificar los resultados usted mismo. De la serie de rendimiento de aproximadamente 10.2 se puede ver que con cada nueva versión de Flash Player optimizan algo, pero otras cosas pueden ser más lentas: 123.

P.S. Esta respuesta podría envejecer muy pronto y podría ser citada en un par de años más tarde, lo que por supuesto será incorrecto.

0

No obtienes ninguna beneficio de rendimiento real con int sobre Número. Entonces, si no está usando una variable para cosas como índices de bucle o cosas que requieren incrementos exactos, el número está bien. De hecho, un Número puede ser NaN si obtiene un resultado inválido, lo cual es un buen beneficio.

+0

Bueno, * obtienes * beneficios de memoria, sin embargo, un int usa 32 bits, un número usa 64 bits. – weltraumpirat

+0

Además, desde su propia fuente vinculada, esta es la respuesta de los miembros: "' + -/*% 'son todas operaciones numéricas. Si se utilizan en una int/uint, el reproductor Flash las convertirá a un número en segundo plano y volver a refundir a int/uint una vez completada la operación. '| &^>><< > >>' (bitwize) conserva los tipos int/uint en el reproductor y están optimizados para ellos para esos tipos. " – weltraumpirat

+0

weltraumpirat, tendría que usar MUCHAS variables para que la diferencia de dos bytes entre int y number sea un problema, pero usted es, por supuesto, correcto. :) – Almo

Cuestiones relacionadas