2010-09-01 11 views
5

J'ai écrit un petit script pour le travail et lors du développement tout allait bien mais quand je l'ai retourné pour la production, les gens se sont plaints du temps qu'il a fallu pour afficher le premier formulaire. En y regardant, tout le temps semblait être consacré à l'importation de divers modules utilisés par le script. J'ai fait un nouveau script de seulement les instructions d'importation et une impression Hello World et puis couru à la fois comme un script python et un exécutable avec les résultats ci-dessous. Que se passe-t-il et est-il possible d'accélérer cela?Pourquoi IronPython est-il si lent à importer des modules lorsqu'il est construit en exe puis en script?

fichier Python:

$ for i in {1..10} 
> do 
> time ./ipy.exe time.py 
> done 
real 0m1.712s 
real 0m1.701s 
real 0m1.689s 
real 0m1.691s 
real 0m1.709s 
real 0m1.663s 
real 0m1.697s 
real 0m1.700s 
real 0m1.699s 
real 0m1.741s 

exe ​​construit avec ipy pyc.py /main:time.py/target: exe

$ for i in {1..10} 
> do 
> time ./time.exe | grep -v user | grep -v sys 
> done 
real 0m22.119s 
real 0m22.116s 
real 0m22.133s 
real 0m21.816s 
real 0m21.985s 
real 0m21.785s 
real 0m22.010s 
real 0m21.686s 
real 0m21.877s 
real 0m21.944s 

contenu de time.py:

import clr 
from clr import AddReference 
AddReference("System.Windows.Forms") 
AddReference("System.Drawing") 
AddReference("p4api") 
import cgi 
from System.Diagnostics import Process 
from P4API import * 
import System 
from System import * 
from System.Windows.Forms import * 
from System.ComponentModel import * 
from System.Drawing import * 
from System.Threading import * 
import re 
import urllib 
import os 
import tokenize 
from cStringIO import StringIO 
from optparse import OptionParser 
import os 
import urllib 
import ntpath 
import stat 
import genericpath 
import warnings 
import linecache 
import types 
import UserDict 
import _abcoll 
import abc 
import textwrap 
import string 
import urlparse 
import collections 
import keyword 
import nturl2path 
import mimetools 
import tempfile 
import random 
import __future__ 
import rfc822 
import tokenize 
import token 
import codecs 
import ConfigParser 
import uuid 
import sys 

print "Hello World" 
+1

L'ajout de/platform: x86 au script de construction a réduit le temps de démarrage de l'exécutable de 22 secondes à 4 secondes, mais cela représente toujours 250% du script .py. –

Répondre

0

Une combinaison de l'ajout/de la plate-forme: x86 à l'appel pcy.py et de l'exécution de ngen sur la DLL et l'exe résultantes a réduit le temps d'exécution de l'exe à 1/2 celui de l'invoquer comme un script. J'appelle ça un succès.