Further investigation shows this also occurs when the com object is
created with out being first registered (e.g. just creating an
instance of the object in python).  The following code reproduces this
issue:

import comtypes
from comtypes.client import CreateObject
import gc,time,threading
import comtypes.server
import comtypes.server.connectionpoints
from comtypes import CoClass, GUID

class TestComServer(CoClass):
        _reg_clsid_ = GUID('{BCCF36F6-4310-4953-B357-0B358BAE2DF1}')
        _reg_threading_ = "Both"
        _reg_progid_ = "TestComServer.Testing.1"
        _reg_novers_progid_ = "TestComServer.Testing"
        _reg_desc_ = "Memoryleak testing"
        _reg_clsctx_ = comtypes.CLSCTX_INPROC_SERVER
        _com_interfaces_ = [comtypes.typeinfo.IProvideClassInfo2,
        comtypes.errorinfo.ISupportErrorInfo,
        comtypes.connectionpoints.IConnectionPointContainer]

while True:
        sink = TestComServer()
        sink.IUnknown_Release(sink)
        sink = None
        gc.collect()

# end


On Mon, Oct 19, 2009 at 2:54 AM, Michael Eddington <medding...@gmail.com> wrote:
> Hello,
>
> I'm using the latest released comtypes version (0.6.1).  I have a long
> running python process that creates and releases a com object also
> written in python.  I noticed that this causes a memory leak.  This
> does not occur if I perform the same operations on a com object
> written in C++.
>
> Below is code for the python com server (inproc) and also the test
> app.  To reproduce:
>
> 1. Open task manager
> 2. python testcomsrver.py -regserver
> 3. python testcom.py
> 4. Notice process continues to grow in size...
>
> I'm using ActiveState Python v2.5.4 on 32bit Win7.
>
> -mike
>
> testcomsrver.py
> ===========
>
> import comtypes
> import comtypes.server
> import comtypes.server.connectionpoints
> from comtypes import CoClass, GUID
>
> class TestComServer(CoClass):
>        _reg_clsid_ = GUID('{BCCF36F6-4310-4953-B357-0B358BAE2DF1}')
>        _reg_threading_ = "Both"
>        _reg_progid_ = "TestComServer.Testing.1"
>        _reg_novers_progid_ = "TestComServer.Testing"
>        _reg_desc_ = "Memoryleak testing"
>        _reg_clsctx_ = comtypes.CLSCTX_INPROC_SERVER
>
>        _com_interfaces_ = [comtypes.typeinfo.IProvideClassInfo2,
>                                                
> comtypes.errorinfo.ISupportErrorInfo,
>                                                
> comtypes.connectionpoints.IConnectionPointContainer]
>
> if __name__ == "__main__":
>    try:
>        from comtypes.server.register import UseCommandLine
>        UseCommandLine(TestComServer)
>    except Exception:
>        import traceback
>        traceback.print_exc()
>        raw_input()
>
> # end
>
>
>
> testcom.py
> ========
>
> import comtypes
> from comtypes.client import CreateObject
> import gc
>
> while True:
>        obj = CreateObject("TestComServer.Testing")
>        obj.Release()
>        obj = None
>        gc.collect()
>
> # end
>

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to