ASP.NET Cache值的范围是否与静态变量的范围相同或更窄?

时间:2010-02-23 10:55:35

标签: .net asp.net caching scope

为了同步对ASP.NET缓存中Dictionary对象的访问,建议使用同步对象。

Dino Esposito建议使用静态变量作为锁定目标(参见http://www.drdobbs.com/cpp/184406369)。但是,这仅在ASP.NET Cache值与静态变量具有相同范围(或更窄范围)时才有效。

有没有人知道这方面的文件?

2 个答案:

答案 0 :(得分:1)

//根据评论更新 每个应用程序域的缓存都是唯一的,因此您无需担心。请参阅MSDN here

  

Cache有一个实例   每个应用程序域的类。作为一个   结果,就是Cache对象   Cache属性返回的是   缓存对象中的所有请求   应用领域。

//原始答案

我不确定我是否理解你的问题。缓存中的任何内容都是全局可访问的(或者至少可以访问任何有权访问缓存对象的内容)。

只要它是您访问该对象的唯一位置,此代码就是安全的。

    private static readonly object lockme = new object();
    public void SetDictionaryValue(string key, string value)
    {
        lock (lockme)
        {
            var lookup = (Dictionary<string, string>)GetFromCache("LookupDictionary");
            lookup["key"] = value;
        }
    }

    public string GetDictionaryValue(string key)
    {
        lock (lockme)
        {
            var lookup = (Dictionary<string, string>)GetFromCache("LookupDictionary");
            return lookup["key"];
        }
    }

但是,是的,它不能保证安全,因为可能有其他代码从其他地方的缓存中检索字典并修改它。不确定如何保证不会发生这种情况。我的意思是你可以使用GUID作为键,但无论如何你都可以迭代所有的缓存变量。

我不确定我是否在这里帮助你?

答案 1 :(得分:0)

为什么不锁定字典对象?然后你的锁会更精细。虽然我同意安德鲁对静态对象的锁定没问题。