为了同步对ASP.NET缓存中Dictionary对象的访问,建议使用同步对象。
Dino Esposito建议使用静态变量作为锁定目标(参见http://www.drdobbs.com/cpp/184406369)。但是,这仅在ASP.NET Cache值与静态变量具有相同范围(或更窄范围)时才有效。
有没有人知道这方面的文件?
答案 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)
为什么不锁定字典对象?然后你的锁会更精细。虽然我同意安德鲁对静态对象的锁定没问题。