Сегодня 18 июля, пятница ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7281
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Flashr
Flashr
Голосов: 1
Адрес блога: http://www.liveinternet.ru/users/flashr/
Добавлен: 2008-05-06 00:10:45 блограйдером lexincorp
 

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

2011-04-22 15:54:46 (читать в оригинале)

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


Тэги: code

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.