在像这样的简单表达式评估中是否有避免内存泄漏的解决方案?
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总是稳定的。
答案 0 :(得分:0)
如果可能,最好使用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++);
但是从我以前的测试中我没有看到任何内存泄漏,你确定这是问题所在吗?