2013-03-06 248 views
1

我正试图将值存储在高速缓存中并将其恢复以提高处理时间。当我找回缓存项时,我需要计算该值。但问题是,它并没有给我存储在缓存中的原始值。取而代之的是,它给了我从缓存中获得的最新价值。C#高速缓存未显示存储在高速缓存中的原始值

我用以下来模拟我的问题。我第一次将“abc123”存储在缓存中。然后我将它改为“def”。但是当我把它拿回来时,它会显示“def”而不是“abc123”。它应该是这样吗?或者我做错了谁?谢谢。

protected void Page_Load(object sender, EventArgs e) 
{ 
    MyObj abc = (MyObj)Cache["myCache"]; 


    if (abc != null) 
    { 
     Response.Write(abc.MyText); 
     Response.End(); 
     return; 
    }   

    Response.Write(abc);   

    abc = new MyObj() { MyText = "abc123" }; 

    Cache.Insert("myCache", abc, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero); 

    abc.MyText = "def"; 
} 

class MyObj 
{ 
    public string MyText { get; set; } 
} 

回答

1

您正在编辑缓存中的同一对象(引用)。如果您不想要这种行为,则需要在将对象放入缓存之前克隆该对象。

+0

我认为缓存对象独立于原始对象。现在我知道他们紧密结合在一起。我将.Clone或.Copy调用放到我的代码中,并解决了所有问题。谢谢。 – TTCG 2013-03-06 11:58:16