2011-06-30 8 views
6

私は高価なコードをキャッシュする次のコードを持っています。明示的に期限を設定しないと、どれくらいの期間、デフォルトでhttpcacheに滞在しますか?

private MyViewModel GetVM(Params myParams) 
    { 
     string cacheKey = myParams.runDate.ToString(); 
     var cacheResults = HttpContext.Cache[cacheKey] as MyViewModel ; 
     if (cacheResults == null) 
     { 
      cacheResults = RunExpensiveCodeToGenerateVM(myParams); 
      HttpContext.Cache[cacheKey] = cacheResults; 
     }     
    return cacheResults; 
    } 

これは永久にキャッシュに残りますか?サーバーが再起動するか、メモリが不足するまで?

答えて

5

これは永久にキャッシュに残りますか?

これは、使用している特定のキャッシュプロバイダによって異なります。たとえば、デフォルトのメモリ内キャッシュを使用している場合、サーバーのメモリ不足が発生した場合、またはアプリケーションプールがリサイクルされた場合に期限切れになる可能性があります。しかし、たとえばmemcachedまたはAppFactoryのような分散キャッシュのような、他のキャッシュプロバイダを使用している場合、これは特定の実装に依存します。

経験則では、以前に格納したものがあるため、キャッシュ内に何かがあるとは決して考えないことです。最初にキャッシュ内の項目の有無をチェックし、存在しない場合はフェッチしてキャッシュに再度格納します。

関連する問題