Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET缓存值的范围是否与静态变量相同或更窄?_.net_Asp.net_Caching_Scope - Fatal编程技术网

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

ASP.NET缓存值的范围是否与静态变量相同或更窄?,.net,asp.net,caching,scope,.net,Asp.net,Caching,Scope,为了同步对ASP.NET缓存中字典对象的访问,建议使用同步器对象 Dino Esposito建议使用静态变量作为锁定目标(请参阅)。但是,仅当ASP.NET缓存值的作用域与静态变量的作用域相同(或更窄)时,此操作才有效 有人知道有这样的文档吗?//根据评论进行更新 每个应用程序域的缓存都是唯一的,因此您无需担心。见MSDN 有一个缓存实例 每个应用程序域的类。作为一个 结果,将显示 缓存属性返回的是 缓存中所有请求的对象 应用程序域 //原始答案 我不太明白你的问题。缓存中的任何内容都是全局可访

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

Dino Esposito建议使用静态变量作为锁定目标(请参阅)。但是,仅当ASP.NET缓存值的作用域与静态变量的作用域相同(或更窄)时,此操作才有效

有人知道有这样的文档吗?

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

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

//原始答案

我不太明白你的问题。缓存中的任何内容都是全局可访问的(或者至少可以由任何可以访问缓存对象的内容访问)

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

    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"];
        }
    }
private static readonly object lockme=new object();
public void SetDictionaryValue(字符串键、字符串值)
{
锁(锁我)
{
var lookup=(Dictionary)GetFromCache(“LookupDictionary”);
查找[“键”]=值;
}
}
公共字符串GetDictionaryValue(字符串键)
{
锁(锁我)
{
var lookup=(Dictionary)GetFromCache(“LookupDictionary”);
返回查找[“键”];
}
}
但是是的,它不能保证安全,因为可能有其他代码从其他地方的缓存中检索字典并对其进行修改。我不知道你怎么能保证那不会发生。我的意思是,您可以使用GUID作为键,但您仍然可以迭代所有缓存变量


我不确定我是否在帮你?

你为什么不锁定dictionary对象?那么,您的锁将更加细粒度。尽管我同意Andrew的观点,对静态对象进行锁定是可以的。

我想我的问题可以重新表述为“ASP.NET缓存对象中的值是否在提交值的AppDomain之外可用”。如果是这样,静态变量锁就不行了。缓存位于当前AppDomain中,我将尝试查找一些官方文档,并更新我的答案。