编译时Expression<T>
,结果代码是否被框架隐式缓存?我正在考虑Regex
框架隐式编译和缓存最后几个正则表达式的静态方法。
如果未Expression<T>
缓存已编译的对象,您能否推荐一些最佳实践来降低编译时间或在我手动缓存表达式时可能导致问题的任何陷阱?
public MyResultType DoSomething(int arg1, int arg2)
{
var result = invokeHandler(
(IDoSomethingHandler h) => h.DoSomething(arg1, arg2)
);
return result;
}
private TResult invokeHandler<T, TResult>(Expression<Func<T, TResult>> action)
where T : class
{
// Here, I might want to check to see if action is already cached.
var compiledAction = action.Compile();
var methodCallExpr = action as MethodCallExpression;
// Here, I might want to store methodCallExpr in a cache somewhere.
var handler = ServiceLocator.Current.GetInstance<T>();
var result = compiledAction(handler);
return result;
}
在这个例子中,我有点担心如果我缓存编译的表达式,它会使用 和 的值,arg1
因为arg2
它们在编译表达式时,而不是从堆栈中的适当位置检索这些值(即而不是获取当前值)。