带表达式的缓存包装器

时间:2010-04-06 10:45:20

标签: c# asp.net caching

我不知道是否有可能。

我想要一个类来封装我网站的所有缓存。我想到了最好的方法,以避免与键冲突。

我的第一个想法是这样的:

    public static TResult Cachear<TResult>(this Cache cache, Expression<Func<TResult>> funcao)
    {
        string chave = funcao.ToString();

        if (!(cache[chave] is TResult))
        {
            cache[chave] = funcao.Compile()();
        }

        return (TResult)cache[chave];
    }

这是最好的方法吗? TY

2 个答案:

答案 0 :(得分:1)

Expression.ToString()相当昂贵。

另一个问题是Expression总是新创建的对象,所以它们永远不会有相同的引用,所以将它作为键是有问题的。

最后一个问题(对您(尚未)影响),正在考虑所有可能的参数组合。

我唯一可以建议的是忘记Expression,并直接使用Func<R>

答案 1 :(得分:0)