[IronPython] IPy2b5 Performance
Asaf Kleinbort
asaf at itstructures.com
Tue Oct 7 17:15:57 CEST 2008
Hi all,
I am investigating performance problems we have when running our code using
IPy2b5 (comparing to IPy 1.1.1).
Found two interesting issues:
1. It seems that there is some bug in the 'sort' method
Running the following code:
from System import DateTime
def test():
s = DateTime.Now
for i in xrange(100000):
a = [1,4,7,6,10,6]
a.sort()
return (DateTime.Now - s).TotalMilliseconds
print test()
we get 3900% (!) degradation between IP1 and IPy2b5: In IPy 1 the code runs
in 390ms and in IPy2b5: 15281ms
2.This is probably already known: there is a major difference in
performance between an if/else block and a try/catch one:
def func1(obj):
try:
return obj.prop
except:
return 0
def func2(obj):
if hasattr(obj,'prop'):
return obj.prop
else:
return 0
def test(s):
for i in xrange(100000):
x = func1(set())
return (DateTime.Now -s).TotalMilliseconds
def test2(s):
for i in xrange(10000):
x = func2(set())
return (DateTime.Now -s).TotalMilliseconds
print test(DateTime.Now)
print test2(DateTime.Now)
Results for IPy1 and IPy2b5 are similar ~3000ms for 'test' and ~15ms for
'test2'. Using if/else is 200 times quicker.
In Cpython it is only 2 times quicker.
We can bypass the second issue in our code, but the first one is harder to
ignore.
Are these issues already known? Any ideas?
Thanks,
Asaf
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20081007/16d1b1d7/attachment.html>
More information about the Ironpython-users
mailing list