【问题标题】:Application object is getting modified when retrieved object is modified当检索到的对象被修改时,应用程序对象正在被修改
【发布时间】:2011-09-19 01:38:50
【问题描述】:

我在应用程序缓存中保留一个全局对象,根据我的需要检索和修改它。奇怪的是,一旦我修改了检索到的对象,应用程序对象也被修改了。我不想修改应用程序对象。

System.Web.HttpContext.Current.Application["obj2"]=obj2;

喜欢

object obj1 = System.Web.HttpContext.Current.Application["obj2"];

当我修改 obj1 时,obj2 也被修改了。你们能建议我解决上述问题吗?

【问题讨论】:

  • 在检索对象时考虑克隆它。您在应用程序中存储什么样的对象?
  • 您正在应用程序缓存中存储一​​个类的实例。将该实例分配给变量不会复制该实例。它实例。这是正确的预期行为。
  • 回到基础:reference vs value type in .NET 在做 ASP.NET 之前。
  • 犬夜叉你能建议我满足我要求的可能解决方案
  • 您没有提出任何要求。你想做什么?

标签: c# .net asp.net caching


【解决方案1】:

C# 中的对象始终是按引用的,这意味着无论何时访问此对象,它始终是该对象的同一个实例。听起来您可能想要做的是先克隆它然后修改克隆。这对于像上面那样的共享内存多线程环境也很重要。

另外,您可以考虑将要缓存的对象设为一个结构,该结构是按值而不是按引用传递的,只要您先将其拆箱即可。一般来说,您不想编辑线程共享的对象。

【讨论】:

    猜你喜欢
    • 2014-04-29
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2018-09-28
    • 2011-09-13
    • 2016-04-25
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多