2009-02-08 13 views
7

Estoy considerando incorporar IronPython como lenguaje de scripting para una aplicación que estoy escribiendo. Entonces, para probarlo, descargué IronPython 2.0 y encendí el intérprete interactivo. El solo hecho de iniciarlo lleva unos 5 segundos en mi Intel Quad Core con 6 gigas de memoria. Difícilmente puedo imaginar cuánto de retraso sería para una máquina menos poderosa.Funcionamiento de IronPython

Basado en these benchmarks, parece que el rendimiento de IronPython en realidad no es terriblemente malo. ¿O es eso? ¿He configurado mal algo durante la instalación? ¿O es esto un problema con el intérprete interactivo?

Respuesta

13

El rendimiento de IronPython es bastante bueno. La penalización de rendimiento de inicio que se obtiene tiene que ver con el tiempo de ejecución de .NET. Las aplicaciones .NET generalmente tienen un tiempo de inicio lento debido a que muchos ensambles se cargan y algunos de ellos (al menos algunas clases) se compilan sobre la marcha.

Este es el comportamiento esperado en .NET. El rendimiento real del tiempo de ejecución es mucho mejor. Incluso el rendimiento de inicio se puede mejorar compilando previamente el ensamblaje de IronPython y colocando una copia en el GAC: caché de ensamblaje global de su máquina. Esto se puede hacer usando el gacutil.exe.

1

El tiempo de arranque y el rendimiento en funcionamiento no están relacionados directamente. Los applets de Java obtuvieron la mayor parte de su reputación de lentitud, no porque el applet funcionó con lentitud, sino porque tardaron los minutos de ejecución para comenzar. Si está haciendo una aplicación de escritorio, me preocuparía el rendimiento de inicio. Si el código del servidor en ejecución donde el tiempo de ejecución siempre está activo, no es un problema.

4

También puede precompilar la biblioteca estándar que viene con IronPython para obtener un mejor rendimiento de inicio. Hay una muestra de pyc.py que puede hacer esto.

+1

Acabo de probar esto y obtengo un rendimiento marginal _worse_. No tengo idea por qué. – Cameron

2

El número de núcleos no va a hacer mucha diferencia para el arranque Potencia :)

de inicio es particularmente lenta en un sistema operativo de 64 bits debido a las diferencias de rentabilidad entre el 32 bits y 64 bits nervios. Si está utilizando un sistema operativo de 64 bits, pero no es necesario un proceso de 64 bits, pruebe lo siguiente:

  1. copia ipy.exe a ipy32.exe
  2. uso corflags.exe desde el SDK de Windows a marque ipy32.exe como un ejecutable de 32 bits diciendo "corflags /32bit + ipy32.exe".

La versión de 32 bits debería proporcionarle un inicio de sesión mucho mejor, aunque todavía no sea tan bueno como el inicio de CPython. Pero esto es algo en lo que continuamos trabajando.

1

Hay mejoras en el tiempo de inicio del intérprete en el código de IronPython en CodePlex. Aunque sigo viendo retrasos en comparación con CPython, hay una mejora significativa.