我在有一個函數如下兩行C#類的一些IronPython的代碼:爲什麼多次執行IronPython代碼會導致OutOfMemoryException?
void test(MyType request){
compiledCode.DefaultScope.SetVarialbe("target", request);
compiledCode.Execute();
}
我在寫一些代碼來進行壓力測試這一/性能測試。我要通過的請求對象是List<MyType>
,其中有一百萬MyType
's。所以我遍歷這個列表:
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的是保持圍繞參考。這花了大約兩倍的時間,但它仍然在同一時間爆炸。
爲什麼我的代碼導致內存泄漏,我該如何解決?
您正在使用哪種IronPython版本?是編譯代碼創建/編譯一次,然後重用? python腳本內部會發生什麼(例如,數據可以以與目標變量不同的方式添加到作用域中)?你有沒有試過用內存分析器來查看它? –
AFAIK它是最新版本。我現在不在工作,所以我無法檢查。哦。哇。是的,這可能會這樣做... –