DynamicExpresso Eval内存泄漏

时间:2017-08-17 08:15:28

标签: dynamic-expresso

在像这样的简单表达式评估中是否有避免内存泄漏的解决方案?

        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总是稳定的。

1 个答案:

答案 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++);

但是从我以前的测试中我没有看到任何内存泄漏,你确定这是问题所在吗?