Использование System.Runtime.Caching, но когда я иду, чтобы получить его, это ноль? - PullRequest
2 голосов
/ 30 декабря 2010

У меня есть приложение C # WPF, и я пытаюсь реализовать кэширование с использованием нового System.Runtime.Caching. Когда я добавляю что-то в Cache, я проверяю это и подтверждаю, что оно есть, и оно есть. Однако, когда я перезапускаю приложение, оно исчезает из кэша.

Итак, в приведенном ниже примере выводом всегда будет «Найдено». Я ожидаю, что при первом запуске он выдает «Found It», но все последующие разы (в течение следующих 10 дней) он выдает «There are present», но это не так. Я запустил его через отладчик и подтвердил, что при каждом перезапуске приложения кэш ["MYDATA"] будет равен нулю.

Что я делаю не так? Спасибо!

Dictionary<Type, Dictionary<string, object>> _CachedObjects = null;
ObjectCache cache = MemoryCache.Default;

_CachedObjects = cache["MYDATA"] as Dictionary<Type, Dictionary<string, object>>;
if (_CachedObjects == null)
{
     _CachedObjects = new Dictionary<Type, Dictionary<string, object>>();

    //code that fills _CachedObjects

     CacheItemPolicy policy = new CacheItemPolicy();
     policy.AbsoluteExpiration = DateTimeOffset.Now.AddDays(10.0);

     cache.Set("MYDATA", _CachedObjects, policy);

     if(cache["MYDATA"] != null)
          Console.WriteLine("Found It");
}
else
     Console.WriteLine("Was already present");

1 Ответ

4 голосов
/ 30 декабря 2010

Объект MemoryCache хранится в энергозависимой памяти, поэтому вам потребуется расширить объект ObjectCache для хранения в файловой системе или каком-либо другом энергонезависимом механизме хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...