首页 新闻 会员 周边

c# 缓存 对象问题

0
悬赏园豆:15 [已解决问题] 解决于 2013-05-13 10:34

JsonAnalysis jsontest = new JsonAnalysis();
         jsontest =(JsonAnalysis)FMCache.GetByKey("111",()=>{
            JsonAnalysis json = new JsonAnalysis();
            json.TagName = "haha";
            return json;
            });
        jsontest.TagName="nono";

JsonAnalysis为一个对象

()=>{
            JsonAnalysis json = new JsonAnalysis();
            json.TagName = "haha";
            return json;
            }

这是一个缓存,如果“111”的缓存为空,就会执行这段话,把缓存存进去(System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache;这缓存对象)。

现在 我发现  第一次取出来的对象  tagname 是haha

但是 我改变了tagname属性为nono后  我再从缓存中取出来的对象就是nono了

而不是 haha  

我查了下,貌似是  对象改变后,缓存会重置。

我想了下,貌似可以用深度克隆。

求大神指点

问题补充:

我本意是不想用深度克隆解决问题的。这样的问题,应该有官方的解决方法的吧!

愚智的主页 愚智 | 初学一级 | 园豆:13
提问于:2013-05-09 17:57
< >
分享
最佳答案
1
View Code
 1         public T DeepClone<T>(T t)
 2         {
 3             if (t != null)
 4             {
 5                 using (Stream s = new MemoryStream())
 6                 {
 7                     IFormatter formatter = new BinaryFormatter();
 8                     formatter.Serialize(s, t);
 9                     s.Seek(0, SeekOrigin.Begin);
10                     return (T)formatter.Deserialize(s);
11                 }
12             }
13             return t;
14         }
收获园豆:15
RoTM | 菜鸟二级 |园豆:301 | 2013-05-09 18:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册