Hi, everyone: I'm performance tuning some code, and running into an issue that I could use some help with. When I run this code:
def loopWire2(w): edges = TopTools.TopTools_HSequenceOfShape(); topexp = TopExp.TopExp_Explorer(); topexp.Init(w,TopAbs.TopAbs_EDGE); while topexp.More(): edges.Append(topexp.Current()); topexp.Next(); return edges; s = loopWire2( ( a wire with about 155 linear edges ) ); ..and I profile it as it runs with cProfile, i see something like this: ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 * 0.009 * 0.009 <string>:1(<module>) 1 0.002 0.002 0.009 0.009 curveIntersections.py:67(loopWire2) 155 0.001 0.000 *0.005* 0.000 c:\python266\lib\site-packages\OCC\TopoDS.py:928(__del__) 157 0.002 0.000 *0.003* 0.000 c:\python266\lib\site-packages\OCC\GarbageCollector.py:75(collect_object) 155 0.001 0.000 0.001 0.000 c:\python266\lib\site-packages\OCC\TopoDS.py:741(<lambda>) Note that a large portion of the execution time is used in creating and collecting TopoDS objects, which i assume are implicitly created in TopExp_Explorer. I first noticed this when code that was iterating over wires with large edge counts was taking a longer than usual time. Though the above runs pretty fast ( 4ms in real time, 9ms profiled ), it doesnt take long for this to add up fast. The code above is an optimized version of what i started with, which ran twice as slow as this one because I used casts to topds_edge, which created more objects that had to be collected. I'm sure I could disable the garbage collector, but that would just defer the problem to later. Does anyone know how to prevent the extra overhead in this case? I have also tried WireExplorer and Utils.Topology-- they appear to perform worse-- though mostly due to the same issue: collecting garbage. So, I am at a loss ( besides going to C++ code--ew ) on how to make the above code run faster. Looping through 155 edges shouldnt take 4ms should it? Here are my operating parameters: windows xp (32 bit ) python 2.6.6 (32 bit ) pythonocc 0.5 ( installed with all-in-one: thus OCC 6.3.0 ) thanks in advance for the ideas/help!
_______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users