DynamicExpresso Eval memory leak

230 Views Asked by At

Is there a solution to avoid memory leak in a simple expression evaluation like this ?

        inter.SetVariable("tick", tick++);
        if (inter.Eval<bool>("(tick%2)==1"))
        {
            odd++;
            if ((odd % 100) == 0)
                System.GC.Collect();
        }
        else
            even++;

I'm running this code periodically in a WinForm application on a Linux machine with Mono (5.0.1.1) and the memory usage continuously increase. Tested on Windows the Process.WorkingSet64 was increasing with a lower rate than Linux. The GC.GetTotalMemory is always stable.

1

There are 1 best solutions below

2
On BEST ANSWER

If possible, it is better to use the Parse method and then just Invoke the expression multiple times.

Something like:

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

But from my previous tests I don't have see any Memory Leak, are you sure that is this the problem?