【发布时间】:2019-06-26 17:39:46
【问题描述】:
我正在尝试将我的应用程序中的一些对象存储在缓存内存中,并在需要时重用它。
我创建了一个 Cache Helper 类,我将在其中执行所有相关功能,例如检查缓存并从缓存中返回数据以及其他一些功能。
基本上我是在尝试缓存 WCF 服务返回的数据。
My consumer code for adding data to cache:
//input- is input parameters
var data= WCFService.GetDetails(input);
//var i = (RealTimeObject)details; // Unboxing
//Helper.AddToCache(cacheKeyName, i);
Helper.AddCache(cacheKeyName, data);
Helper.cs AddCache 方法:
public void AddCache(string key, object data)
{
if (cache == null) return;
var absoluteExpiration = DateTime.Now.AddSeconds(300);
cache.Add(key, data, null, absoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
所以当服务返回一些数据(有两个列表)时,它将被分配给数据变量,并将被添加到缓存中,但是在我们的业务逻辑中,我们将数据中的一些项目设置为 null 所以它也会影响缓存的数据,因为我们使用引用来存储它。 因此,任何人都知道我们如何克隆 wcf 返回的数据并将其存储在缓存中,或者以任何其他方式处理它的任何想法将不胜感激。如果我遗漏了什么,请告诉我,以便我提供更多详细信息。谢谢。
已编辑:为什么在这种情况下正常拆箱并将其更改为值类型也不起作用?
【问题讨论】:
-
一种选择是在缓存时将数据序列化为 Json,并在检索时反序列化。
-
@stuartd,你的意思是在缓存数据之前,在其他变量中序列化并通过从缓存中反序列化来检索它?
-
你用的是什么缓存?
-
@stuartd 仅我使用的直接内存缓存。
-
WCF 不太可能返回值类型,因此此处不适用装箱和拆箱。