[IronPython] Exception Performance
Dino Viehland
dinov at microsoft.com
Tue Aug 3 19:24:10 CEST 2010
I think we still need to make sure that a call to float (and other numeric
primitives) uses light weight exceptions as well for this scenario to completely
be fast but that should be pretty easy.
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Dave Fugate
> Sent: Tuesday, August 03, 2010 10:03 AM
> To: Discussion of IronPython
> Subject: Re: [IronPython] Exception Performance
>
> Yup, I think you'll find the situation in IronPython 2.7A1 to be a bit better
> in this respect:
> D:\rft\vsl\dlr\bin>type blah.py
> from System.Diagnostics import Stopwatch
> t = Stopwatch()
>
> try:
> t.Start()
> x = 1/0
> except Exception, e:
> t.Stop()
>
> print t.Elapsed.TotalMilliseconds
>
> D:\rft\vsl\dlr\bin>"C:\Program Files (x86)\IronPython 2.6\ipy.exe"
> blah.py
> 2.6096
>
> D:\rft\vsl\dlr\bin>"C:\Program Files (x86)\IronPython 2.6\ipy.exe"
> blah.py
> 2.4518
>
> D:\rft\vsl\dlr\bin>"C:\Program Files (x86)\IronPython 2.6\ipy.exe"
> blah.py
> 2.4622
>
> D:\rft\vsl\dlr\bin>"C:\Program Files (x86)\IronPython 2.7\ipy.exe"
> blah.py
> 0.7887
>
> D:\rft\vsl\dlr\bin>"C:\Program Files (x86)\IronPython 2.7\ipy.exe"
> blah.py
> 0.7633
>
> D:\rft\vsl\dlr\bin>"C:\Program Files (x86)\IronPython 2.7\ipy.exe"
> blah.py
> 0.7683
>
> Dave
>
>
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Jeff Hardy
> Sent: Tuesday, August 03, 2010 8:41 AM
> To: Discussion of IronPython
> Subject: Re: [IronPython] Exception Performance
>
> Hi Cory,
>
> On Mon, Aug 2, 2010 at 12:41 PM, Cory Brostowicz <cory.brostowicz at gmail.com>
> wrote:
> > Hello,
> > I noticed the performance in one of my python scripts has really bad
> > performance, so I started profiling different sections of the script
> > to find out where the issue is. It turns out, the exception handle
> > seems to add the biggest chunk of time.
>
> IronPython 2.6 and earlier rely on the .NET exception mechanism.
> .NET's exception handling is extremely slow, whereas CPython has an extremely
> fast exception handling system. I don't know the details of why each is the
> way it is, though - engineering tradeoffs, I guess.
>
> IronPython 2.7 will have a 'lightweight' exception mechanism that should be
> closer to the performance of CPython.
>
> > I've fairly new to the Python language, so if there is a better way to
> > do what I'm doing, then please let me know.
>
> Unfortunately, I think that's pretty much idiomatic Python, which often relies
> on it's very fast exception handling. In .NET you use the
> Try* methods instead, which don't throw exceptions.
>
> If you don't need CPython compatibility, you could use System.Double.TryParse
> (http://msdn.microsoft.com/en-us/library/994c0zb1.aspx), but I don't know how
> to use out parameters from IronPython off the top of my head.
>
> On an unrelated note, you can write your print statement as:
>
> print "Total: %s RateGet: %s RateSets: %s Exception Handle: %s
> Rate: %s" % (t.Elapsed.TotalMilliseconds, rateGet, rateSet,
> e.Elapsed.TotalMilliseconds, Rate)
>
> - Jeff
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
More information about the Ironpython-users
mailing list