[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