2010-02-23 20 views

回答

1

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

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

//原来的答复

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

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

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作为键,但是你可以迭代所有的缓存变量。

我不知道我是否在帮你吗?

+0

我想我的问题可以改写为“提交值的AppDomain之外可用的ASP.NET缓存对象中的值”。如果是这样,一个静态变量锁定将不会执行。 – goofballLogic 2010-02-23 13:45:04

+0

缓存存在于当前的AppDomain中,我会尝试找到一些官方文档来更新我的答案。 – 2010-02-23 14:03:50

0

为什么不锁定字典对象?那么你的锁将更加细致。虽然我同意Andrew对静态对象的锁定很好。