Как сделать кеш памяти с клонированием объекта в C # - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь сохранить некоторые объекты в моем приложении в Cache Memory и повторно использовать их при необходимости.

Я создал класс 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);
  }

Таким образом, когда служба возвращает некоторые данные (есть два списка), она будет присвоена переменной данных и будет добавлена ​​в кэш, но в нашей бизнес-логике мы делаем некоторые элементы, которые есть в данных, нулевымитак что это влияет и на кэшированные данные, так как мы храним их, используя ссылку.Так что любой, как любая идея, как мы можем клонировать возвращенные данные wcf и хранить их в кеше, или любая идея обработки их любым другим способом, будут оценены.Пожалуйста, дайте мне знать, если я что-то пропустил, чтобы я мог дать больше деталей.Спасибо.

Отредактировано: почему обычная распаковка и изменение его в качестве типа значения также не работает в этом случае?

1 Ответ

0 голосов
/ 28 июня 2019

Как упоминал Стюарт, я справился с этим, преобразовав 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;
}
...