Ответ 1
Проверьте класс кэша памяти, доступный как часть платформы .NET http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx
Вам нужно добавить сборку System.RunTime.Caching в качестве ссылки на ваше приложение. Ниже приведен вспомогательный класс для добавления элементов и удаления их из кеша.
using System;
using System.Runtime.Caching;
public static class CacheHelper
{
public static void SaveTocache(string cacheKey, object savedItem, DateTime absoluteExpiration)
{
MemoryCache.Default.Add(cacheKey, savedItem, absoluteExpiration);
}
public static T GetFromCache<T>(string cacheKey) where T : class
{
return MemoryCache.Default[cacheKey] as T;
}
public static void RemoveFromCache(string cacheKey)
{
MemoryCache.Default.Remove(cacheKey);
}
public static bool IsIncache(string cacheKey)
{
return MemoryCache.Default[cacheKey] != null;
}
}
Приятная вещь в том, что он потокобезопасен, и он заботится о том, чтобы автоматически закрыть кэш. Поэтому в основном все, что вам нужно сделать, это проверить, является ли получение элемента из MemoryCache нулевым или нет. Примечание однако, что MemoryCache доступен только в .NET 4.0 +
Если ваше приложение является веб-приложением, используйте System.Web.Caching, а не MemoryCache. System.Web.Caching доступен с .NET 1.1, и нет дополнительных ссылок, которые вы должны добавить в свой проект. Heres тот же вспомогательный класс для веб-страниц.
using System.Web;
public static class CacheHelper
{
public static void SaveTocache(string cacheKey, object savedItem, DateTime absoluteExpiration)
{
if (IsIncache(cacheKey))
{
HttpContext.Current.Cache.Remove(cacheKey);
}
HttpContext.Current.Cache.Add(cacheKey, savedItem, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0), System.Web.Caching.CacheItemPriority.Default, null);
}
public static T GetFromCache<T>(string cacheKey) where T : class
{
return HttpContext.Current.Cache[cacheKey] as T;
}
public static void RemoveFromCache(string cacheKey)
{
HttpContext.Current.Cache.Remove(cacheKey);
}
public static bool IsIncache(string cacheKey)
{
return HttpContext.Current.Cache[cacheKey] != null;
}
}
Существуют и другие политики истечения срока действия кэша, которые вы можете использовать для обоих этих шаблонов, например, кеш, основанный на пути к файлу, так что, когда файл автоматически изменяется, кеш автоматически истекает, зависит от кеша SQL (периодически выполняется опрос SQL-сервер для изменений), скользящий срок действия или вы можете создать свой собственный. Они очень полезны.