[IronPython] Garbage collection of imported modules

Christian Muirhead christian.muirhead at resolversystems.com
Fri Jul 25 19:28:42 CEST 2008


Hi guys -

If I execute the following:

###
from System.Diagnostics import Process

M = 1024 * 1024

import bigmodule

for i in range(1000):
     m = reload(bigmodule)
     print i, Process.GetCurrentProcess().PrivateMemorySize64 / M
###

(in IP 1.1.1), I see steadily increasing memory usage - the assemblies 
created by reloading each module are not being garbage collected. 
Talking to Giles (the boss here), he remembered a conversation with 
someone at the Languages.NET conference about how some assemblies aren't 
collectable, while others that are generated without debugging 
information can be collected.

Looking at the source for PythonEngine I can see the 
EngineOptions.ClrDebuggingEnabled property, with a comment saying 
essentially the same thing.

However, when I try to use this with the following code, I still get 
increasing memory usage.

###
from textwrap import dedent
from IronPython.Hosting import PythonEngine, EngineOptions
from System.Diagnostics import Process

M = 1024 * 1024

o = EngineOptions()
o.ClrDebuggingEnabled = False
p = PythonEngine(o)
p.Sys.path.append('.')

for i in range(1000):
     p.Execute(dedent('''\
     import bigmodule
     reload(bigmodule)
     '''))
     print i, Process.GetCurrentProcess().PrivateMemorySize64 / M
###

So the assemblies generated from compiling the imported module are still 
not collectable. (I've also tried running the first script in an 
interpreter (with ClrDebuggingEnabled off) embedded in a C# application, 
to make sure there's nothing untoward happening because of nested 
PythonEngines, but I see the same behaviour).

Is there any way to have these modules collected? Is the situation the 
same in IP 2.*?

Thanks,
Christian

-- 
Christian Muirhead
Resolver Systems
christian.muirhead at resolversystems.com
We're hiring! http://www.resolversystems.com/jobs/


Resolver Systems Ltd
17a Clerkenwell Road, London EC1M 5RD, UK
VAT No.: GB 893 5643 79 Registered in England and Wales as company 
number 5467329.
Registered address: 843 Finchley Road, London NW11 8NA, UK



More information about the Ironpython-users mailing list