Ответ 1
1 Cache["key"] = value
равно Cache.Insert("key", value)
MSDN Cache.Insert - метод (String, Object):
Этот метод перезапишет существующий элемент кэша, ключ которого соответствует ключу параметр. Объект, добавленный к кеш, используя эту перегрузку Метод Insert вставлен без файла или кеш-зависимостей, приоритет Значение по умолчанию, скользящее значение срока действия NoSlidingExpiration и абсолютный срок действия NoAbsoluteExpiration.
2 Лучше удалить значения из кеша с помощью Cache.Remove( "ключ" ).
Если вы используете Cache["key"] = null
, то он равен Cache.Insert("key", null)
.
Взгляните на реализацию Cache.Insert
:
public void Insert(string key, object value)
{
this._cacheInternal.DoInsert(true, key, value, null, NoAbsoluteExpiration, NoSlidingExpiration, CacheItemPriority.Normal, null, true);
}
и CacheInternal.DoInsert
:
internal object DoInsert(bool isPublic, string key, object value, CacheDependency dependencies, DateTime utcAbsoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback, bool replace)
{
using (dependencies)
{
object obj2;
CacheEntry cacheKey = new CacheEntry(key, value, dependencies, onRemoveCallback, utcAbsoluteExpiration, slidingExpiration, priority, isPublic);
cacheKey = this.UpdateCache(cacheKey, cacheKey, replace, CacheItemRemovedReason.Removed, out obj2);
if (cacheKey != null)
{
return cacheKey.Value;
}
return null;
}
}
Сравните его с Cache.Remove
:
public object Remove(string key)
{
CacheKey cacheKey = new CacheKey(key, true);
return this._cacheInternal.DoRemove(cacheKey, CacheItemRemovedReason.Removed);
}
CacheInternal.DoRemove
:
internal object DoRemove(CacheKey cacheKey, CacheItemRemovedReason reason)
{
object obj2;
this.UpdateCache(cacheKey, null, true, reason, out obj2);
return obj2;
}
И, наконец, Cache.Remove("key")
гораздо более читается, чем Cache["key"] = null