在web方法中,通过注释[WebMethod(CacheDuration ...]属性来实现缓存非常简单。我们可以为非web方法创建类似的东西,例如静态方法吗?
感谢任何帮助/提示。
答案 0 :(得分:4)
没有内置功能可以实现您想要的功能。您应该使用Httpruntime.Cache
。
它不是内置功能,但您可以使用面向方面编程(AOP)实现类似功能。使用方面缓存信息。
如果您感兴趣Spring.NET提供AOP
答案 1 :(得分:2)
使用Post Sharp检查this用于缓存的属性的简单实现。
答案 2 :(得分:1)
如果您无法使用AOP完成工作,您可以尝试使用我放在一起的这个小课程。
public MyClass CachedInstance
{
get { return _cachedInstance.Value; }
}
private static readonly Cached<MyClass> _cachedInstance = new Cached<MyClass>(() => new MyClass(), TimeSpan.FromMinutes(15));
public sealed class Cached<T>
{
private readonly Func<T> _createValue;
private readonly TimeSpan _cacheFor;
private DateTime _createdAt;
private T _value;
public T Value
{
get
{
if (_createdAt == DateTime.MinValue || DateTime.Now - _createdAt > _cacheFor)
{
lock (this)
{
if (_createdAt == DateTime.MinValue || DateTime.Now - _createdAt > _cacheFor)
{
_value = _createValue();
_createdAt = DateTime.Now;
}
}
}
return _value;
}
}
public Cached(Func<T> createValue, TimeSpan cacheFor)
{
if (createValue == null)
{
throw new ArgumentNullException("createValue");
}
_createValue = createValue;
_cacheFor = cacheFor;
}
}