我在 C# 类中有一些 IronPython 代码,该类在函数中有以下两行:
void test(MyType request){
compiledCode.DefaultScope.SetVarialbe("target", request);
compiledCode.Execute();
}
我正在编写一些代码来对此进行压力测试/性能测试。我传入的请求对象是List<MyType>
一百万MyType
的。所以我遍历这个列表:
foreach(MyType thing in myThings){
test(thing);
}
而且效果很好 - 运行时间约为 6 秒。当我跑
for(int x = 0; x < 1000; x++){
foreach(MyType thing in myThings){
test(thing);
}
}
在循环的第 19 次迭代中,我得到一个OutOfMemoryException
.
我尝试做Python.CreateEngine(AppDomain.CurrentDomain)
而不是,这似乎没有任何效果,我尝试了
...
compiledCode.Execute();
compiledCode.DefaultScope.RemoveVariable("target");
希望 IronPython 以某种方式保留参考。这大约是它花费的时间的两倍,但它仍然在同一时间爆炸。
为什么我的代码会导致内存泄漏,我该如何解决?