[python-win32] speed of win32com versus comtypes

Mark Hammond skippy.hammond at gmail.com
Thu Jan 27 03:21:53 CET 2011


On 26/01/2011 3:38 PM, Brad Buran wrote:
> I've been using win32com.client for the past year or so.  Recently, I
> noticed that there was a bottleneck in my code, and I tracked this
> down to _get_good_single_object (line 478).  When using comtypes
> instead of win32com.client, calling the ReadTagVEX method on my COM
> object is 4.8 times faster so the slowdown appears to be in
> _get_good_object_.  The COM function in question, ReadTagVEX, is
> supposed to return an Array of VARIANT.  These arrays are quite large
> (on the order of 100,000 or 200,000 samples) on each read.
>
> I'd much rather stick with win32com.client if possible.  Are there any
> suggestions for speeding up this function?  I already know that the
> array returned will be an array of float32.

You could just call InvokeTypes directly using a copy-paste of the 
generated makepy code - somewhat ugly, but probably effective.

(There is probably an optimization opportunity to avoid the call to 
_get_good_object completely when the result of the function is other 
than a generic "object" (ie, VT_DISPATCH) or array of such objects - but 
in this case, the function declares it does return a generic 
VT_DISPATCH, so the optimization wouldn't be able to be used in this 
particular case...)

Mark


More information about the python-win32 mailing list