ObjectCache的“Set”和“Add”有什么区别?

时间:2013-12-12 16:41:47

标签: asp.net caching

来自doc

  

添加(CacheItem,CacheItemPolicy):在派生类中重写时,尝试将缓存条目作为CacheItem实例插入缓存中,并添加有关如何该条目应被驱逐。 [1]

-

  

Set(CacheItem,CacheItemPolicy):在派生类中重写时,将缓存条目作为CacheItem实例插入缓存中,指定有关如何逐出该条目的信息。 [2]

我看到措辞上没什么区别(尝试)和签名(set是一个子,add返回一个布尔值),但我不确定哪个一个我应该使用的,如果两者之间确实存在不同的东西。

1 个答案:

答案 0 :(得分:31)

主要区别在于Add()方法尝试插入缓存而不覆盖具有相同密钥的现有缓存条目。

虽然Set()方法将覆盖具有相同密钥的现有缓存条目。 [但是,如果项目的密钥不存在,则插入将作为新的缓存条目进行]。

以上是其功能方面的差异。

语法差异:

一个重要的语法差异是Add()方法返回一个布尔值,如果插入成功则为true,如果缓存中已存在具有相同键的条目,则为false作为项目。 Set()方法具有void返回类型。

最后一点,Add()方法的内部实现实际上调用了相应版本的AddOrGetExisting()方法。

 public virtual bool Add(CacheItem item, CacheItemPolicy policy)
{
    return this.AddOrGetExisting(item, policy) == null;
}