正在修改缓存而不是本地变量(通过ref传递)



我正在编写一个.net c#应用程序。

我从xml文件中检索一些数据,将数据缓存到.net缓存中,然后从我的方法中返回。我对数据进行一些处理,并将其作为应用程序的另一部分返回。

下一次调用,我从缓存中读取,处理它并返回它等。

我遇到的问题是,对缓存数据执行的处理似乎修改了缓存,而不是本地变量,这意味着下次我从缓存中读取时,返回的是上一次处理中的已处理数据。

因此,从缓存返回的数据似乎是由ref而不是value返回的。

知道如何防止缓存被修改吗?

内存缓存将存储指向对象的指针。它就像一个全局变量。分配给缓存项的任何其他变量都将引用同一对象。这对于进程外缓存或分布式缓存是不同的。对于这些类型的缓存,必须从缓存中序列化和反序列化对象。在这种情况下,你会得到副本。

如果你想模拟进程外的行为,你可以复制/克隆一个对象,或者序列化/反序列化缓存外的对象。

这是您需要了解的关于数据类型的基本内容。

听起来您的缓存正在存储引用类型,即对象实例或类似的东西。当你被传递其中一个时,你会得到一个对实例的引用,引用本身实际上是通过值传递回来的,也就是说,你不能改变引用,但它所引用的thihg当然可以改变,这就是你看到的行为。

如果您希望这样做,以便在使用实例时实例保持不变,那么请先制作它们的副本。(如果它们是复杂类型,则可能需要编写一个克隆方法)

根据类型的不同,解决方案可能只是在从缓存检索时克隆对象/项。

XmlNode克隆方法

相关内容

  • 没有找到相关文章

最新更新