Я использую IronPython 2.6.2 для .NET 4.0 как платформу сценариев в приложении C#/WPF. Скрипты могут включать в себя их собственные определения функций, определения классов и т. Д. Я не ограничиваю, что можно записать.Утечка памяти IronPython при вызове с более чем 13 параметрами
Ускорение памяти появилось в скриптовой части недавно после смены сценария. После комментирования все большего количества кода мы определили, что определение и вызов функции с более чем 13 параметрами вызывает утечку памяти. Поэтому, если вы вызываете функцию с 14 параметрами, то IronPython будет протекать.
Вот некоторые примеры кода по таймеру выполняется каждые 100 мс:
_Timer.Enabled = false;
try
{
var engine = Python.CreateEngine();
engine.Execute("def SomeFunc(paramI, paramII, paramIII, paramIV, paramV, paramVI, paramVII, paramVIII, paramIX, paramX, paramXI, paramXII, paramXIII, paramXIV):\r\n\tpass\r\nSomeFunc(1,2,3,4,5,6,7,8,9,10,11,12,13,14)");
//engine.Execute("def SomeFunc(paramI, paramII, paramIII, paramIV, paramV, paramVI, paramVII, paramVIII, paramIX, paramX, paramXI, paramXII, paramXIII):\r\n\tpass\r\nSomeFunc(1,2,3,4,5,6,7,8,9,10,11,12,13)");
// With and without the following line makes no difference
engine.Runtime.Shutdown();
this.Dispatcher.Invoke((Action)delegate()
{
this.Title = DateTime.Now.ToString();
});
}
catch (Exception)
{
}
_Timer.Enabled = true;
Обратите внимание, что у меня есть версия с 14-параметрической сценария и ниже это закомментированная версия 13-параметр. Сценарий Python в основном это:
def SomeFunc(paramI, paramII, paramIII, paramIV, paramV, paramVI, paramVII, paramVIII, paramIX, paramX, paramXI, paramXII, paramXIII, paramXIV):
pass
SomeFunc(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
Я попытался с и без engine.Runtime.Shutdown(), но это не имеет никакого значения. Память 14-параметрической версии будет быстро расти, и память с 13 параметрами будет слегка расти, а затем стабилизироваться.
Любые мысли?
Благодаря - Shaun
Спасибо, Джефф. Я пробовал 2.7 Beta 2 и имел те же результаты. Запуск приложения с 14-параметрической версией «голого металла» быстро просочился в память, но версия с 13 параметрами потребляла некоторую память, а затем стабилизировалась. – Shaun
Для всех, кого это интересует, я отправил ошибку в проект IronPython на CodePlex в комплекте с образцом кода, который демонстрирует проблему. http://ironpython.codeplex.com/workitem/30131 – Shaun