1

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

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

4

1 回答 1

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

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

于 2017-08-17T09:16:24.333 回答