1

ASP.NET CacheObjectにアイテムを入れたいのですが、変更すると、いくつかの依存アイテムが削除されます。

だから..リクエストで

  1. プロンプトが表示され、それがキャッシュに存在する場合、ルートオブジェクトを削除すると、すべての依存関係も削除されます
  2. キャッシュ内のルートオブジェクトを確認します。存在しない場合は追加します
  3. ルートオブジェクトに依存する他のオブジェクトをキャッシュに追加します

これを行うと、エラーが発生します " An attempt was made to reference a CacheDependency object from more than one Cache entry"

AggregateCacheDependencyを実行して、1つのキャッシュされたアイテムに多くの依存関係を適用できるようですが、その逆はできないようです。

誰かがこれを行う方法を見つけましたか?

ここにいくつかのコードがあります、それは私が実際に保存しているものではありませんが、それは同じタスクを表しています

public class HomeController : Controller
{
    private const string ROOT_KEY = "ROOT";

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {   
        base.Initialize(requestContext);

        if(Request.QueryString["clearcache"]!=null){
            // removed the root, hopefully removing all dependents
            HttpContext.Cache.Remove(ROOT_KEY);
        }

        if (HttpContext.Cache[ROOT_KEY] == null)
        {
            // create the root entry
            HttpContext.Cache[ROOT_KEY] = string.Empty;
        }

        if(HttpContext.Cache[Request.Url.AbsolutePath]==null){

            // add the url if not already added
            HttpContext.Cache.Insert(
                Request.Url.AbsolutePath, string.Empty, 
                new CacheDependency(null, new []{ROOT_KEY}));
        }
    }
}
4

2 に答える 2

3

上記のコードは機能します。重要なのは、毎回新しいCacheDependencyを作成することでした。同じオブジェクトを再利用しようとした非擬似コードで、これが説明されているエラーの原因でした。

@ Adeel&Jaroslavとにかく返信してくれてありがとう

于 2010-07-14T11:42:28.090 に答える
0

1つのイベントでの複数の無効化の問題は、現在利用可能なキャッシュがネイティブまたは効率的に処理できない問題です。TagCacheの作成者として、ぜひ試してみて、シナリオでより適切な選択であるかどうかを確認してください。

于 2011-09-24T03:12:03.573 に答える