[python-win32] Python win32Com Server DLL

Tim Roberts timr at probo.com
Thu Feb 16 19:48:56 EST 2017


Stephen Chapman wrote:
> So after much research on the library .  It certainly looks like the
> invoke method is taking all the time.  Is this because of the
> conversion from Variant???
>
> On Tue, Feb 7, 2017 at 11:09 AM, Stephen Chapman
> <schapman1974 at gmail.com <mailto:schapman1974 at gmail.com>> wrote:
>
>     Hello,
>        I am having a speed issue while running dll functions.  I have
>     a minimal com server example and a minimal com client example
>     below.  I have added cProfile to the example.  All source files
>     and the profile are attached.  
>
>        So when I run this example I get between 1.4 seconds to 1.7
>     seconds.  I am running a loop of 10,000 doing 2 methods in the
>     loop.  So the here are a couple lines from the profile.
>
>        ncalls  tottime  percall  cumtime  percall
>     filename:lineno(function)
>             1    0.050    0.050    1.740    1.740
>     cpminimaltest.py:6(testcalltime)
>         20001    0.103    0.000    1.689    0.000 dynamic.py:41(__call__)
>         20004    0.698    0.000    1.247    0.000
>     automation.py:702(Invoke)
>         80001    0.276    0.000    0.313    0.000
>     automation.py:197(_set_value)
>

A late-bound COM call is not an efficient operation, and having it be
out-of-process adds even more time.  20,000 calls in 0.7 seconds is 35
microseconds per call, which is pretty ding-danged fast.  In my view,
you have unrealistic expectations.


>
>     It seems like the Invoke is taking an inordinate amount of time. 
>     When I create a minimal example in C# and run the same test.  I
>     get .009 seconds.   Is there something I am not doing right. 
>

Do you mean 0.009 seconds for 20,000 calls?  I don't believe that.  How
are you doing the timing?  Are you measuring wall-clock time or CPU
time?  Since it's out-of-process, time spent in the server isn't going
to be counted.  Are you sure the calls weren't optimized away?  I
suppose it is possible that C# did the dynamic COM lookup once and
cached the result, but even so, I can't believe 500 nanoseconds per call
with a context switch involved.

In your minimal example, are BOTH ends in C#?

-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the python-win32 mailing list