Кешируемые объекты ASP.NET обновляются автоматически при обновлении объекта? - PullRequest
3 голосов
/ 03 июля 2010

Я нашел какой-то код в сети, и он меня скинул. Посмотрите на код ниже. Вы заметите, только когда Хиты == 1, кеш будет добавлен. После этого объект кеша не обновляется. Напрашивается вопрос, обновляется ли объект при обновлении также автоматически? Ответ здесь заставит меня удалить некоторый код в некоторых из моих классов.

public static bool IsValid( ActionTypeEnum actionType )
{
   HttpContext context = HttpContext.Current;
   if( context.Request.Browser.Crawler ) return false;

   string key = actionType.ToString() + context.Request.UserHostAddress;
   var hit = (HitInfo)(context.Cache[key] ?? new HitInfo());

   if( hit.Hits > (int)actionType ) return false;
   else hit.Hits ++;

   if( hit.Hits == 1 )
      context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION), 
         System.Web.Caching.Cache.NoSlidingExpiration, 
         System.Web.Caching.CacheItemPriority.Normal, null);
   return true;
}

Я бы только предположил, что мне нужно будет добавить строки после оператора if:

 if( hit.Hits == 1 )
              context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(10), 
                 System.Web.Caching.Cache.NoSlidingExpiration, 
                 System.Web.Caching.CacheItemPriority.Normal, null);
    else if (hit.Hits > 1)
{context.Cache.Remove(key);             
 context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(10), 
                 System.Web.Caching.Cache.NoSlidingExpiration, 
                 System.Web.Caching.CacheItemPriority.Normal, null);
}

Нашли код внизу страницы здесь: http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx?msg=2809164

1 Ответ

2 голосов
/ 03 июля 2010

Этот код обновляет кэшированный объект независимо от того, какие попадания.Важная строка здесь:

var hit = (HitInfo)(context.Cache[key] ?? new HitInfo());

Он захватывает ссылку на объект HitInfo внутри кэша, если он не существует, и в этом случае он создает новый.Таким образом, и ASP.Net Cache, и локальная переменная hit имеют ссылку на один и тот же объект - обновление его в этом коде обновляет его в кэше.

В случае, когда он создает новый,затем он добавляет его в кэш, поэтому при следующем выполнении кода строка выше будет возвращать этот объект.Нет необходимости удалять объект, а затем повторно кэшировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...