[IronPython] Performances and Profiling of ReportLab under IronPython

Marco Parenzan marco.parenzan at libero.it
Thu Aug 20 16:21:47 CEST 2009


Other results.

 

I have hosted IPY in a test C# application in which I separate ScriptScope
creation from execution: specifically, I create scope one time, import
modules, and then execute, 100 times.

Timings are ok:

 

Python Startup Elapsed time: 10595

Execution 0 Elapsed time: 1454ms

Execution 1 Elapsed time: 55ms

Execution 2 Elapsed time: 38ms

Execution 3 Elapsed time: 32ms

Execution 4 Elapsed time: 32ms

Execution 5 Elapsed time: 35ms

Execution 6 Elapsed time: 27ms

Execution 7 Elapsed time: 27ms

Execution 8 Elapsed time: 27ms

Execution 9 Elapsed time: 25ms

Execution 10 Elapsed time: 39ms




Execution 99 Elapsed time: 22ms

 

At the moment for me is ok (waiting for a solutions, or, at least, to
understand the 10 seconds!).

 

Another question:. This is the code I use to create the scope:

 

    __pyEngine = Python.CreateEngine();

    __pyEngine.SetSearchPaths(__pySearchPaths);

 

    __pyScope = __pyEngine.CreateScope();

    __pyEngine.Execute("from reportlab.graphics.shapes import Drawing,
String", __pyScope);

    __pyEngine.Execute("from reportlab.graphics import renderPDF",
__pyScope);

 

 


and I use the scope to execute the subsequent code

 

d = Drawing(100, 100)

s = String(50, 50, "Hello World", textAlign='middle')

 

d.add(s)

 

renderPDF.drawToFile(d, "HelloWorld.pdf", "HW")

 

The thing I dislike is sharing the single scope among the multiple execution
of scripts during process life: I’d like to recreate scope every time, but
at the moment I have the discussed module load cost. Is there any way to
load the module at engine level (a sort of global) that all scopes can view,
without importing every time?

 

Thanks in advance

 

                Marco [dot] Parenzan [at] libero [dot] it

 

From: Marco Parenzan [mailto:marco.parenzan at libero.it] 
Sent: giovedì 20 agosto 2009 11.26
To: 'users at lists.ironpython.com'
Subject: Performances and Profiling of ReportLab under IronPython

 

Dear All,

 

I downloaded IPY2.6beta2 to test this script:

 

from reportlab.graphics.shapes import Drawing, String

from reportlab.graphics import renderPDF

 

d = Drawing(100, 100)

s = String(50, 50, "Hello World", textAlign='middle')

 

d.add(s)

 

renderPDF.drawToFile(d, "HelloWorld.pdf", "HW")

 

IPY 2.0.2 takes 20 seconds; IPY 2.6beta2 about 8! But it takes
long....CPython takes less that a second.

 

I have executed profiling from Curt post
<http://blogs.msdn.com/curth/archive/2009/03/29/an-ironpython-profiler.aspx>
. This is the result (first 15 rows, sorted by calls DESC):

 


Name

Inclusive

Exclusive

Calls


type Builtin: method: chr(Int32)

46543

46543

1453


type Builtin: method: ord(Object)

17910

17910

888


type List: method: append(Object)

11752

11752

468


type Builtin: method: __import__(CodeContext, String, Object, Object,
Object, Int32)

209641377

209641377

380


type Builtin: method: hasattr(CodeContext, Object, String)

771507

771507

317


type Builtin: method: divmod(CodeContext, Object, Object)

99164

99164

262


type PythonDictionary: method: has_key(Object)

48355

48355

218


type Builtin: method: len(Object)

42922

42922

189


type StringOps: method: join(String, List)

19591

19591

182


module colors: class Color: def __init__(self, red, green, blue)

17359

8780

150


module colors: def HexColor(val, htmlOnly)

145565

6839

150


type Builtin: method: isinstance(CodeContext, Object, Object)

6342

6342

146


module pdfdoc: def format(element, document, toplevel, InstanceType)

5712898

6437

114


module pdfutils: def _escape(s): def <lambda$840>(c, d)

4710

2922

108


type StringOps: method: lower(String)

3266

3266

100

 

Sorted by Inclusive:

 


Name

Inclusive

Exclusive

Calls


type Builtin: method: __import__(CodeContext, String, Object, Object,
Object, Int32)

209641377

209641377

380


module renderPDF01

61950185

256

1


module shapes

45433217

1455217

1


module __init__

40333697

53011

8


module site

18405008

1141596

1


module renderPDF: def drawToFile(d, fn, msg, showBoundary, autoSize)

13208473

210

1


module flowables

13108755

64681

1


module os

10374697

101300

1


module paragraph

9988916

104182

1


module colors

9227303

9866

1


module utils

7020300

220690

1


module canvas: class Canvas: def save(self)

6521990

49

1


module pdfdoc: class PDFDocument: def SaveToFile(self, filename, canvas)

6493142

169

1


module pdfdoc: class PDFDocument: def GetPDFData(self, canvas)

6215312

142

1


module pdfdoc: def format(element, document, toplevel, InstanceType)

5712898

6437

114

 

I have not experience: any idea on improving performances? Thanks

 

                Marco [dot] Parenzan [at] libero [dot] it

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20090820/2831b23f/attachment.html>


More information about the Ironpython-users mailing list