System.Linq.Expressions.Expression类中的Lambda(Expression body,params ParameterExpression []参数)方法变得越来越慢

时间:2017-12-06 11:08:07

标签: c# linq lambda

我在MVC应用程序上遇到了性能问题。我需要在运行时通过相应的字符串解析lambda表达式。当应用程序启动时,它运行得很快,但每次调用该方法时执行时间会越来越多。 CPU和RAM不会增加,但核心方法需要更多的时间。

当应用程序启动时,执行时间只有几毫秒。在多次调用它之后,执行时间变为10 ms,100 ms,依此类推。这是代码片段:

public static LambdaExpression ParseLambda(ParameterExpression[] parameters, Type resultType, string expression, params object[] values)
{
    ExpressionParser parser = new ExpressionParser(parameters, expression, values);
    var body = parser.Parse(resultType);
    var lambdaExpression = Expression.Lambda(body, parameters); //this is the problematic call
    return lambdaExpression ;
}

Expression.Lambda(body, parameters)的调用总是花费更多时间来完成。

重新启动应用程序后,该方法再次变得快速。

为了提高效率,我应该每小时或更频繁地重启应用程序。但由于很多原因,这是不可能的。

  1. 这种性能下降的原因是什么?
  2. 可以解决吗?
  3. 是否有工作可以在不重启的情况下重新获得初始执行时间?
  4. 任何帮助都将不胜感激。

0 个答案:

没有答案