-Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в Flashr

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 26.02.2007
Записей:
Комментариев:
Написано: 6574


Про кэширование

Пятница, 22 Апреля 2011 г. 15:54 + в цитатник
Недавно писал про оптимизацию сайта для всяких спидтестов. Но все они бесполезны, если сам сайт работает медленно, а чтобы его ускорить нужно не только встроенное кэширование на уровне страниц - @OutputCache, но и кэширование на уровне объектов модели. Кэширование на уровне базы, всякие memcache актуально лишь когда есть куча FrontEnd'ов и они тоже генерят немало запросов несмотря на свое кэширование.

Так вот, для кэширования объектов в asp.net делается простой класс, например:
Copy Source | Copy HTML
  1. /// <summary>
  2.     /// Класс кэшированных объектов
  3.     /// </summary>
  4.     public abstract class CacheObject<T> : ISystemObject where T : CacheObject<T>, new()
  5.     {
  6.         /// <summary>
  7.         /// Необходимо задать функцию загрузки из кэша
  8.         /// </summary>
  9.         public static T LoadFromCache(string UID)
  10.         {
  11.             object o = HttpRuntime.Cache.Get(typeof(T).Name + UID);//попробовали загрузить
  12.             if (o == null)
  13.             {
  14.                 T sample = new T();
  15.                 return sample.Load(UID)?sample:null;
  16.             }
  17.             return o as T;//если получилось, то вернем объект
  18.         }
  19.  
  20.         /// <summary>
  21.         /// Необходимо задать уникальный номер объекта
  22.         /// </summary>
  23.         protected abstract string _CacheUID
  24.         {
  25.             get; set;
  26.         }
  27.  
  28.         /// <summary>
  29.         /// Необходимо задать уникальный номер объекта
  30.         /// </summary>
  31.         protected virtual string _CacheKey
  32.         {
  33.             get
  34.             {
  35.                 return typeof(T).Name + _CacheUID;
  36.             }
  37.         }
  38.  
  39.         /// <summary>
  40.         /// Время, через которое будет очищен кэш
  41.         /// </summary>
  42.         protected virtual TimeSpan? _CacheExpiration
  43.         {
  44.             get
  45.             {
  46.                 return null;
  47.             }
  48.         }
  49.  
  50.         /// <summary>
  51.         /// Сохранение
  52.         /// </summary>
  53.         public virtual bool Save()
  54.         {
  55.             HttpRuntime.Cache.Insert(_CacheKey, this,null,Cache.NoAbsoluteExpiration,_CacheExpiration??Cache.NoSlidingExpiration);
  56.             return true;
  57.         }
  58.  
  59.         /// <summary>
  60.         /// Удаление
  61.         /// </summary>
  62.         public virtual bool Delete()
  63.         {
  64.             HttpRuntime.Cache.Remove(_CacheKey);
  65.             return true;
  66.         }
  67.  
  68.         /// <summary>
  69.         /// Удаление специфичного объекта, 
  70.         /// необходимо для использования связных классов
  71.         /// </summary>
  72.         public static bool Remove(string UID)
  73.         {
  74.             HttpRuntime.Cache.Remove(typeof(T).Name + UID);
  75.             return true;
  76.         }
  77.  
  78.         /// <summary>
  79.         /// Первичная загрузка
  80.         /// </summary>
  81.         public abstract bool Load(string uid);
  82.  
  83.         /// <summary>
  84.         /// Первичная загрузка по строчке БД
  85.         /// </summary>
  86.         public abstract bool Load(DataRow dr);
  87.     }

И теперь любой объект модели может быть прототипирован как class MyObject : CacheObject . И уже конкретный экземляр создан вызовом MyObject mo = MyObject.LoadFromCache(uid);
Ничего более сложного для кэширования объектов в asp.net сайте-фронтэнде, на мой взгляд, не нужно.
Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку