我在一个基于c#的WebService中托管IronPython,以便能够提供自定义扩展脚本。然而,当我通过在循环中重复执行webservice进行简单的负载测试时,我发现内存使用量急剧增加。
IronPython-1.1在其对象上实现了IDisposable,以便您可以在它们完成时处理它们。基于DLR的新IronPython-2引擎没有这样的概念。
据我所知,每次在ScriptEngine中执行脚本时,都会在应用程序域中注入一个新的程序集,并且无法卸载。
有什么办法可以解决这个问题吗?
发布于 2009-03-05 04:03:28
事实证明,在aspnet_wp达到500mb时,垃圾收集器开始工作并清理垃圾。然后,内存使用量下降到20mb左右,并在负载测试期间再次开始稳步增加。这样就没有内存“泄漏”了。
发布于 2009-03-04 17:28:46
您可以尝试在每次运行IronPython脚本时创建一个新的AppDomain。虽然assembly不能从内存中卸载,但您可以卸载AppDomain,这将允许您将注入的程序集从内存中取出。
发布于 2009-03-05 02:03:58
您需要禁用优化的代码生成:
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();
}https://stackoverflow.com/questions/610128
复制相似问题