【发布时间】:2008-11-03 14:50:04
【问题描述】:
编译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 的值,就像它们在编译表达式时一样,而不是检索这些值从堆栈中的适当位置(即,而不是获取当前值)。
【问题讨论】:
标签: c# .net linq caching expression