IronPython内存使用情况

时间:2009-03-04 11:11:19

标签: performance ironpython

我在基于c#的WebService中托管IronPython,以便能够提供自定义扩展脚本。但是,当我通过循环重复执行webservice进行简单的负载测试时,我发现内存使用量急剧增加。

IronPython-1.1在其对象上实现了IDisposable,以便您可以在完成后对其进行处理。基于DLR的新型IronPython-2引擎没有这样的概念。

根据我的理解,每次在ScriptEngine中执行脚本时,都会在appdomain中注入一个新程序集,并且无法卸载。

有什么方法吗?

3 个答案:

答案 0 :(得分:1)

每次运行IronPython脚本时,都可以尝试创建新的AppDomain。虽然无法从内存中卸载assebmlies,但您可以卸载AppDomain,这样就可以让注入的程序集内存不足。

答案 1 :(得分:1)

您需要禁用优化代码生成:

var runtime = Python.CreateRuntime();
var engine = runtime.GetEngine("py");
PythonCompilerOptions pco = (PythonCompilerOptions)engine.GetCompilerOptions();
pco.Module &= ~ModuleOptions.Optimized;

// this shouldn't leak now
while(true) {
   var code = engine.CreateScriptSourceFromString("1.0+2.0").Compile(pco);
   code.Execute();
}

答案 2 :(得分:0)

事实证明,在aspnet_wp达到约500mb后,垃圾收集器开始并清除混乱。然后内存使用率降至约20mb,并在负载测试期间稳定地再次开始增加。 因此,没有内存“泄漏”。