В данном разделе описаны универсальные методы класса DBConnector для работы с кэшем.
public T GetCachedEntity<T>(string key, Func<string, T> fillAction) where T : class public T GetCachedEntity<T>(string key, double interval, Func<string, T> fillAction) where T : class public T GetCachedEntity<T>(string key, Func<T> fillAction) where T : class public T GetCachedEntity<T>(string key, double interval, Func<T> fillAction) where T : class
Обобщенный метод кэширования, который может использоваться для кэширования объектов любых ссылочных типов (например, коллекций объектов, полученных на основе LINQ-to-SQL классов, сгенерированных в QP7). На его основе построены более специализированные методы кэширования в Quantumart.dll.
Стоит отметить, что в web-среде возвращаемый объект является общим для для нескольких потоков, поэтому его изменение может привести к непредсказуемым последствиям. Поэтому при необходимости модифицировать такие объекты рекомендуется синхронизировать доступ к ним. В то же время использование таких объектов для чтения в большинстве случаев потокобезопасно (нужно смотреть документацию на конкретный тип).
Метод может использоваться для кэширования любых ссылочных типов. Для того, чтобы кэшировать значимый тип (value type), необоходимо выполнить принудительный boxing (число можно для этого, например, преобразовать в строку). Также поддерживается кэширование null-значений.
DBConnector cnn = new DBConnector(); List<Banner> banners = cnn.CacheManager.GetCachedEntity<List<Banner>>(pageAddress, 10, GetPageBanners);
Где GetPageBanners – метод, возвращающий List<Banner>, который будет вызван только при заполнении кэша.
public DataTable GetCachedData(string queryString) public DataTable GetCachedData(string queryString, double cacheInterval)
Метод, выполняющий произвольный SQL-запрос и возвращающий DataTable c сохранением результата в кэше. Ключ кэширования строится на основании текста запроса, кроме того к ключу добавляется префикс, в который входят имя БД и имя сервера БД, что позволяет работать с несколькими экзеплярами класса DBConnector в одной web-среде. При необходимости выполнить аналогичный запрос без кэширования можно воспользоваться методом GetRealData. Продолжительность кэширования может задаваться параметром cacheInterval, если же она не задана, то используется значение параметра InternalExpirationTime из конфигурационного файла. Стоит отметить, что в web-среде возвращаемая таблица является общей для нескольких потоков (пользовательских сессий), поэтому ее изменение может привести к непредсказуемым последствиям в других потоках. Например, нельзя менять свойство RowFilter у DefaultView, а вместо этого нужно создавать новый DataView на основе DataTable и менять свойство RowFilter у него.
Считывает текстовый файл по заданному пути и сохраняет его в кэше. При изменении файла кэш сбрасывается.
public string GetCachedFileContents(string path)
Discussion