Я работаю с API, который работает довольно медленно, и в результате мое приложение получает довольно большой удар по производительности. Мне удалось оптимизировать часть кода и значительно сократить время загрузки, но я также хотел бы кэшировать некоторые данные во всех сеансах, чтобы минимизировать количество обращений к серверу, которое я должен совершить. Сейчас я выполняю один вызов API, который занимает почти 10 секунд, и возвращаемые данные редко изменяются (возможно, раз в несколько недель). То, что я хотел бы сделать, это кэшировать этот результат, а также время, когда он был получен, и выполнять вызов API только в том случае, если с момента последнего вызова прошло определенное время, в противном случае возвращаются кэшированные результаты. В настоящее время я пытаюсь это:
[WebMethod]
public List<RegionList> getRegionLists() {
if (GlobalAppCache.RegionListsLastUpdate == DateTime.MinValue || GlobalAppCache.RegionListsLastUpdate.AddMinutes(15) > DateTime.Now)
{
List<RegionList> regionLists = new List<RegionList>( );
// Do Some API Calls
GlobalAppCache.RegionListsLastUpdate = DateTime.Now;
GlobalAppCache.CachedRegionLists = regionLists;
return regionLists;
}
return GlobalAppCache.CachedRegionLists;
}
С классом GlobalAppCache:
public class GlobalAppCache {
public static DateTime RegionListsLastUpdate{get;set;}
public static List<RegionList> CachedRegionLists{get;set;}
}
Этот метод кэширования не работает (вызов API выполняется каждый раз, и результаты из кэша не возвращаются), и я не смог получить ничего общего с приложением [] массив для работы либо. Кто-нибудь может указать мне правильное направление? Если я смогу заставить это работать, я смогу улучшить производительность, кэшируя больше элементов в этом объекте GlobalAppCache. Спасибо!