Кэш или переменная приложения для хранения списка объектов?
В моем приложении я читал некоторые XML-файлы в список объектов (List<Thing>
) но я хочу избежать попадания в файловую систему при каждом запросе. Данные в файлах XML редко изменяются, поэтому я бы хотел как-то их кешировать. Либо загрузка данных при запуске приложения, либо загрузка его ленивым, меня устраивает. Мне нужно будет использовать данные в моем приложении и выполнять запросы Linq к ним, почти используя их как мини-базу данных в памяти. Мне нужно будет иметь возможность изменять / обновлять данные, не влияя на кэшированную версию, поэтому может потребоваться копирование данных в локальную переменную. Как мне этого добиться?
2 ответа
Вы можете использовать объект кеша для него.
myxmllist = HttpContext.Current.Cache["myxmllist"];
if (myxmllist == null)
{
//get xml from server
HttpContext.Current.Cache.Insert("myxmllist", myxmllist); // add it to cache
}
Одно из главных преимуществ System.Runtime.Caching.MemoryCache
или же System.Web.Caching.Cache
это возможность установить политику истечения срока действия для элементов, которые вы кэшируете. Если вы собираетесь загружать данные только один раз и хранить их в памяти в течение всего времени жизни процесса, вы также можете использовать статический член класса, который вы создаете и заполняете данными в статическом конструкторе того же класса. Если ваши операции изменения / обновления не должны влиять на данные в памяти, вам необходимо загрузить (или скопировать) данные в другой экземпляр контейнера и изменить (и, возможно, сохранить) их.