如何在 C# 中通过克隆对象进行内存缓存
How to do memory cache with Cloning of object in C#
我正在尝试将应用程序中的一些对象存储在缓存内存中,并在需要时重新使用它。
我创建了一个缓存助手 class,我将在其中执行所有相关功能,例如检查缓存和从缓存返回数据以及其他一些功能。
基本上我正在尝试缓存 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 添加缓存方法:
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);
}
因此,当服务 returns 一些数据(那里有两个列表)时,它将被分配给数据变量并将其添加到缓存中,但在我们的业务逻辑中,我们正在制作一些项目数据为空,因此它也会影响缓存数据,因为我们使用引用存储它。
因此,任何人都知道我们如何克隆 wcf 返回的数据并将其存储在缓存中,或者任何以任何其他方式处理它的想法都将受到赞赏。如果我遗漏了什么,请告诉我,以便我提供更多详细信息。谢谢
已编辑:为什么正常拆箱并将其更改为值类型在这种情况下也不起作用?
正如 Stuartd 提到的,我已经通过转换为 Json 并作为普通对象返回来处理这个问题。
这是将数据添加到缓存的代码。
sereviceData = WCFService.GetDetails(Input);
if(sereviceData!=null)
{
var dataToCache = JsonConvert.SerializeObject(sereviceData);
Helper.Add(cacheName, dataToCache);
}
下面是用于从缓存中检索的代码示例,
if (Helper.CacheCheck(cacheName))
{
var dataInCache= Helper.GetData(cacheName);
var data = JsonConvert.DeserializeObject<RealTimeObject>(dataInCache.ToString());
return data;
}
我正在尝试将应用程序中的一些对象存储在缓存内存中,并在需要时重新使用它。
我创建了一个缓存助手 class,我将在其中执行所有相关功能,例如检查缓存和从缓存返回数据以及其他一些功能。
基本上我正在尝试缓存 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 添加缓存方法:
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);
}
因此,当服务 returns 一些数据(那里有两个列表)时,它将被分配给数据变量并将其添加到缓存中,但在我们的业务逻辑中,我们正在制作一些项目数据为空,因此它也会影响缓存数据,因为我们使用引用存储它。 因此,任何人都知道我们如何克隆 wcf 返回的数据并将其存储在缓存中,或者任何以任何其他方式处理它的想法都将受到赞赏。如果我遗漏了什么,请告诉我,以便我提供更多详细信息。谢谢
已编辑:为什么正常拆箱并将其更改为值类型在这种情况下也不起作用?
正如 Stuartd 提到的,我已经通过转换为 Json 并作为普通对象返回来处理这个问题。
这是将数据添加到缓存的代码。
sereviceData = WCFService.GetDetails(Input);
if(sereviceData!=null)
{
var dataToCache = JsonConvert.SerializeObject(sereviceData);
Helper.Add(cacheName, dataToCache);
}
下面是用于从缓存中检索的代码示例,
if (Helper.CacheCheck(cacheName))
{
var dataInCache= Helper.GetData(cacheName);
var data = JsonConvert.DeserializeObject<RealTimeObject>(dataInCache.ToString());
return data;
}