2009-03-04 119 views
2

我在基於c#的WebService中託管IronPython以能夠提供自定義擴展腳本。但是,當我通過循環重複執行web服務來執行簡單的負載測試時,我發現內存使用率急劇增加。IronPython內存使用情況

IronPython-1.1在它的對象上實現了IDisposable,這樣你就可以在它們完成時處置它們。基於DLR的新IronPython-2引擎沒有這樣的概念。

從我所瞭解的情況來看,每次在ScriptEngine中執行腳本時,都會在appdomain中注入一個新程序集,並且無法卸載。

有沒有辦法解決這個問題?

回答

0

事實證明,去的aspnet_wp約500MB後,在垃圾收集器踢和清理出來的爛攤子。內存使用量下降到20mb左右,並在負載測試期間穩步開始增加。因此,這裏沒有記憶「泄漏」。

+0

您對我去年向IP團隊提交的問題感興趣。 http://www.mail-archive.com/[email protected]/msg05771.html – Sake 2009-05-30 23:36:54

1

每次運行一個IronPython腳本時,都可以嘗試創建一個新的AppDomain。雖然不能從內存中卸載斷言,但可以卸載AppDomain,這將允許您從內存中獲取注入的程序集。

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(); 
}