I'm interested in this as well. We wrote a simple mesh exporter getting all verts per frame and it was *significantly* faster using a compiled one compared to the scripted plugin. (well as you say about 10 times). All it was doing really was calling MFnMesh.getPoints in both versions..
I wondered if it's maybe so slow to get all the queried data into a python list (or array which was a bit faster I if I remember correctly).. Any insight very welcome :) On Thu, Nov 6, 2008 at 8:05 PM, Horvátth Szabolcs <[EMAIL PROTECTED]>wrote: > > Hi, > > A while ago I did some experiments with python based data export and > found that there are very significant speed differenced between Python > API and C++ API when using the MFnPfxGeometry class. I created a simple > pfxdata export command using both languages (using similar queries, > loops and stuff) and found that in my test scenes the speed difference > is about 8 - 10 times. > (I removed every string operation, file output, data accumulation stuff, > the command only did the important data query and all variable > allocations were optimized.) > > After Matthew Chapman's suggestion I tried doing some profiling using > python's profiler library (cool stuff BTW) and got the data attached to > the end of the mail. The question is: is there anything I can do to > speed up the code based on the profiler's output (that I can't really > comprehend by myself) or do I have to simply forget the Python API as an > exporter? Or is it just a limitation of the MFnPfxGeometry class? Do you > experience such speed differences in other API areas? > > Thanks for any tips in advance! > > Cheers, > Szabolcs > > --- > > 8211552 function calls in 40.582 CPU seconds > > Ordered by: cumulative time > List reduced from 75 to 10 due to restriction <10> > > ncalls tottime percall cumtime percall filename:lineno(function) > 1 0.000 0.000 40.582 40.582 > profile:0(profileTestProcNoStrings()) > 1 0.000 0.000 40.581 40.581 <string>:1(?) > 1 4.384 4.384 40.581 40.581 <maya > console>:2(profileTestProcNoStrings) > 384000 2.417 0.000 29.618 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9481(__getitem__) > 384000 3.924 0.000 27.201 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9565(__init__) > 1254430 5.139 0.000 16.562 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:21(_swig_setattr) > 1254430 7.826 0.000 11.423 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:7(_swig_setattr_nondynamic) > 422420 2.586 0.000 7.333 0.000 :0(hasattr) > 384000 1.352 0.000 5.699 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9505(<lambda>) > 384000 1.422 0.000 4.313 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9507(<lambda>) > > > Ordered by: internal time > > ncalls tottime percall cumtime percall filename:lineno(function) > 1254430 7.826 0.000 11.423 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:7(_swig_setattr_nondynamic) > 1254430 5.139 0.000 16.562 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:21(_swig_setattr) > 1 4.384 4.384 40.581 40.581 <maya > console>:2(profileTestProcNoStrings) > 384000 3.924 0.000 27.201 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9565(__init__) > 1728070 3.050 0.000 3.050 0.000 :0(get) > 422420 2.586 0.000 7.333 0.000 :0(hasattr) > 384000 2.417 0.000 29.618 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9481(__getitem__) > 409610 2.383 0.000 3.084 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:24(_swig_getattr) > 384000 1.490 0.000 1.490 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9524(__getitem__) > 384000 1.422 0.000 4.313 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9507(<lambda>) > > > > Ordered by: call count > > ncalls tottime percall cumtime percall filename:lineno(function) > 1728070 3.050 0.000 3.050 0.000 :0(get) > 1254430 5.139 0.000 16.562 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:21(_swig_setattr) > 1254430 7.826 0.000 11.423 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:7(_swig_setattr_nondynamic) > 422420 2.586 0.000 7.333 0.000 :0(hasattr) > 422420 1.402 0.000 1.402 0.000 :0(isinstance) > 409610 2.383 0.000 3.084 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:24(_swig_getattr) > 384000 0.803 0.000 0.803 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9517(__del__) > 384000 3.924 0.000 27.201 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9565(__init__) > 384000 1.352 0.000 5.699 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9505(<lambda>) > 384000 1.422 0.000 4.313 0.000 > > C:\engserv\rbuild\164\build\wrk\optim\runTime\Python\Lib\site-packages\maya\OpenMaya.py:9507(<lambda>) > > > > > -- Sebastian Schoellhammer Sr. Technical Artist Square Enix LTD www.square-enix.com --~--~---------~--~----~------------~-------~--~----~ Yours, Maya-Python Club Team. -~----------~----~----~----~------~----~------~--~---
