假设我们有以下代码:
ExpressionHelper.GetRouteValuesFromExpression<AccountController>(ax => ax.MyAction("a", "b"));
(来自 ASP.NET MVC 期货程序集)。方法相当快 - 它在 150 毫秒内执行 10k 次迭代。
现在,我们将代码更改为:
string a = "a";
string b = "b";
ExpressionHelper.GetRouteValuesFromExpression<AccountController>(ax => ax.MyAction(a, b));
此代码将在 15秒内执行 10k 次迭代
问题是以下代码:
Expression<Func<object>> lambdaExpression = Expression.Lambda<Func<object>>(Expression.Convert(arg, typeof (object)));
Func<object> func = lambdaExpression.Compile();
value = func()
有没有比每次都编译表达式更好的方法来从表达式中获取价值?这会极大地影响 ASP.NET MVC 链接生成速度。