2

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

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

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

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

所以看起来从缓存返回的数据是由ref而不是value返回的。

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

4

3 回答 3

5

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

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

于 2011-05-25T00:37:13.603 回答
3

这是一个相当基本的事情,您需要了解数据类型。

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

如果您希望它能够工作,以便在您使用它们时实例不会发生变化,请先复制它们。(如果它们是复杂类型,您可能需要编写克隆方法)

于 2011-05-24T22:41:15.603 回答
1

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

XmlNode 克隆方法

于 2011-05-24T22:28:03.757 回答