Почему IronPython намного медленнее импортирует модули при сборке как исполняемый файл, чем как скрипт? - PullRequest
5 голосов
/ 02 сентября 2010

Я написал небольшой сценарий для работы, и при его разработке все было хорошо, но когда я передал его для производственного использования, люди жаловались на время, необходимое для отображения первой формы.Заглядывая в это, казалось, что все время тратится на импорт различных модулей, используемых скриптом.Я сделал новый скрипт только для операторов import и для печати Hello World, а затем запустил его как скрипт на python и как исполняемый файл с результатами ниже.Что происходит и есть ли способ ускорить это?

Файл 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, созданный с помощью 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

содержимое 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 Ответ

0 голосов
/ 02 сентября 2010

Комбинация добавления / platform: x86 к вызову pcy.py и запуску ngen на полученной dll и exe сократили время выполнения exe до 1/2 времени вызова его как скрипта. Я бы назвал это успешным.

...