DynamicExpresso Eval内存泄漏
DynamicExpresso Eval memory leak
是否有解决方案可以避免像这样的简单表达式计算中的内存泄漏?
inter.SetVariable("tick", tick++);
if (inter.Eval<bool>("(tick%2)==1"))
{
odd++;
if ((odd % 100) == 0)
System.GC.Collect();
}
else
even++;
我 运行 在装有 Mono (5.0.1.1) 的 Linux 机器上的 WinForm 应用程序中定期执行此代码,并且内存使用量不断增加。
在 Windows 上测试,Process.WorkingSet64 的增长速度低于 Linux。
GC.GetTotalMemory一直稳定。
如果可能,最好使用Parse
方法,然后多次Invoke
表达式。
类似于:
// One time only
string expression = "(tick%2)==1";
Lambda parsedExpression = interpreter.Parse(expression, new Parameter("tick", typeof(int)));
// Call invoke for each cycle...
var result = parsedExpression.Invoke(tick++);
但是根据我之前的测试,我没有看到任何内存泄漏,您确定这是问题所在吗?
是否有解决方案可以避免像这样的简单表达式计算中的内存泄漏?
inter.SetVariable("tick", tick++);
if (inter.Eval<bool>("(tick%2)==1"))
{
odd++;
if ((odd % 100) == 0)
System.GC.Collect();
}
else
even++;
我 运行 在装有 Mono (5.0.1.1) 的 Linux 机器上的 WinForm 应用程序中定期执行此代码,并且内存使用量不断增加。 在 Windows 上测试,Process.WorkingSet64 的增长速度低于 Linux。 GC.GetTotalMemory一直稳定。
如果可能,最好使用Parse
方法,然后多次Invoke
表达式。
类似于:
// One time only
string expression = "(tick%2)==1";
Lambda parsedExpression = interpreter.Parse(expression, new Parameter("tick", typeof(int)));
// Call invoke for each cycle...
var result = parsedExpression.Invoke(tick++);
但是根据我之前的测试,我没有看到任何内存泄漏,您确定这是问题所在吗?