1

System.Web.Caching.Cache私が取り組んでいるプロジェクトで使用されていることを発見したばかりで、それに関する詳細情報を見つけるのに苦労しています。

私の質問は、このキャッシュがどのように永続化されるかです。クライアント側 ( に似ていますViewState)、サーバー側 ( Session) ですか? 全然違う?

例:

protected string FileContent 
{ 
    get 
    { 
        return Cache[FILE_UPLOAD_KEY + Id] as string ?? GetFileUpload(); 
    } 
}
4

2 に答える 2

5

これは、サーバー側のアプリケーション全体のキャッシュです。

このクラスのインスタンスは、アプリケーション ドメインごとに 1 つ作成され、アプリケーション ドメインがアクティブである限り有効です。このクラスのインスタンスに関する情報は、HttpContext オブジェクトの Cache プロパティまたは Page オブジェクトの Cache プロパティを通じて入手できます。(キャッシュ クラス、MSDN )

キャッシュされたオブジェクトに時間制限などを設定する機能を付与します。また、オブジェクトが再び必要になったときにそこにあると限りません。十分なメモリがある限り、アイテムをキャッシュに保持します。

そのため、ページ ビュー ( ViewStateまたはSessionを使用) またはコントロール ( Itemsを使用)間でオブジェクトを渡すことは意図されていません。これは、構築に費用がかかるグローバル オブジェクト (すべてのクライアントからの要求でアクセス可能) をキャッシュすることを目的としています。

于 2013-04-02T14:52:13.100 に答える
2

サーバーで永続化され、セッション全体でグローバルApplicationです。したがって、 に値を設定すると、Cache有効期限が切れるまですべてのユーザーが使用できます。

編集

あなたが持っている例は、おそらく完全に正しくありません(GetFileUpload()実際にキャッシュに書き込む場合を除きます)。通常、キャッシュへの呼び出しは次のようになります。

string GetSomeStringFromCache()
{
    string someString = Cache[SomeKey] as string;
    if (someString == null)
    {
        someString = GetStringUsingSomeExpensiveFunction();
        Cache.Add(SomeKey, someString, /*a bunch of other parameters*/);
    }
    return someString;
}

これにより、キャッシュがまだ存在しない場合はキャッシュに入れられますが、存在する場合はそのまま使用されます。

于 2013-04-02T14:52:15.777 に答える