Dynamic expresso DynamicExpresso Eval内存泄漏

Dynamic expresso DynamicExpresso Eval内存泄漏,dynamic-expresso,Dynamic Expresso,在这样一个简单的表达式求值中,有没有避免内存泄漏的解决方案 inter.SetVariable("tick", tick++); if (inter.Eval<bool>("(tick%2)==1")) { odd++; if ((odd % 100) == 0) System.GC.Collect(); } else

在这样一个简单的表达式求值中,有没有避免内存泄漏的解决方案

        inter.SetVariable("tick", tick++);
        if (inter.Eval<bool>("(tick%2)==1"))
        {
            odd++;
            if ((odd % 100) == 0)
                System.GC.Collect();
        }
        else
            even++;
inter.SetVariable(“tick”,tick++);
如果(内部评估(“(勾选%2)==1”))
{
奇数++;
如果((奇数%100)==0)
System.GC.Collect();
}
其他的
偶数++;
我在Linux机器上使用Mono(5.0.1.1)定期在WinForm应用程序中运行这段代码,内存使用量不断增加。 在Windows上测试,Process.WorkingSet64的增长率低于Linux。
GC.GetTotalMemory总是稳定的。

如果可能,最好使用
Parse
方法,然后多次调用表达式

比如:

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

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

如果可能,最好使用
Parse
方法,然后多次调用表达式

比如:

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

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

我用发布的代码再次进行了测试,在30K周期后,我丢失了17MB。根据您的建议更改代码后,我没有相同周期数的内存泄漏。我现在的问题是,我有一组变量和一组表达式,我不知道表达式中使用了哪个变量。SetVariable/Eval二人完美地解决了这个问题:您对如何在本例中使用Invoke有什么建议吗?@EzioR。变量集是固定的还是动态的?在第一种情况下,您可以使用所有参数创建表达式。在第二种情况下,您可以添加一个Dictionary类型的参数,该参数将根据?因此,您可以编写如下内容:
vars[“a”]
。你的字典在哪里?我用我发布的代码再次做了测试,30K循环后我丢失了17MB。根据您的建议更改代码后,我没有相同周期数的内存泄漏。我现在的问题是,我有一组变量和一组表达式,我不知道表达式中使用了哪个变量。SetVariable/Eval二人完美地解决了这个问题:您对如何在本例中使用Invoke有什么建议吗?@EzioR。变量集是固定的还是动态的?在第一种情况下,您可以使用所有参数创建表达式。在第二种情况下,您可以添加一个Dictionary类型的参数,该参数将根据?因此,您可以编写如下内容:
vars[“a”]
。你的字典在哪里?