Кэш или переменная приложения для хранения списка объектов?

В моем приложении я читал некоторые 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 это возможность установить политику истечения срока действия для элементов, которые вы кэшируете. Если вы собираетесь загружать данные только один раз и хранить их в памяти в течение всего времени жизни процесса, вы также можете использовать статический член класса, который вы создаете и заполняете данными в статическом конструкторе того же класса. Если ваши операции изменения / обновления не должны влиять на данные в памяти, вам необходимо загрузить (или скопировать) данные в другой экземпляр контейнера и изменить (и, возможно, сохранить) их.

Другие вопросы по тегам