Как держать текущую дату в кеше, но не ставить под угрозу эффективность - asp.net - PullRequest
0 голосов
/ 29 июля 2010

Я создаю веб-приложение, используя asp.net (c #) и lingtosql. Когда я выполняю операции обновления на моей базе данных, я обновляю свои классы. Я использую gridview для привязки для обновления информации. Когда я передаю только базу данных, страница загружается очень долго. Когда я передаю данные только в кеш, у меня старые данные. Какие обходные пути у меня есть для асинхронного обновления кэша, но не для перегрузки базы данных бесконечными запросами (я бы хотел обновить кэш только в том случае, если произошли изменения в самой базе данных, и выполнить операцию обновления асинхронно). *

Большое спасибо,

Ответы [ 2 ]

0 голосов
/ 13 апреля 2016

При наличии GridView:

 <asp:GridView ID="gv" runat="server">

В методе, который вызывает gv.DataBind(), подключитесь к набору данных, который заполняется из кэша.

System.Web.Caching.Cache cache = HttpContext.Current.Cache;
System.Data.DataSet gvDataSet = cache.Get("gvDataSet") as System.Data.DataSet;
if (gvDataSet == null)
{
        gvDataSet = GetDataSetFromDatabase();
        cache.Insert("gvDataSet",
                      gvDataSet, 
                      null, 
                      System.Web.Caching.Cache.NoAbsoluteExpiration,  
                      TimeSpan.FromMinutes(120), 
                       System.Web.Caching.CacheItemPriority.Default,
                       null);
}
gv.DataSource = gvDataSet;
gv.DataBind();

В коде, который обновляет DataSet, очистите кеш.

 cache.Remove("gvDataSet");

Если код, который обновляет DataSet, является внешним по отношению к веб-серверу, напишите обработчик HTTP (универсальный обработчик), содержащий код для очистки кэша и вызова обработчика из внешнего кода.

0 голосов
/ 29 июля 2010

У вас может быть что-то вроде: если кеш был неактивен в течение определенного времени (например, 30 минут), он обновит данные из базы данных.

Cache.Insert("CachedData", dt, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30));

или вы можете обновлять данные в кеше каждый определенный промежуток времени. Проверьте Объект кэша .

Иначе, если вам нужно что-то вроде кэша, он обновит свои данные из базы данных только при наличии обновлений, которые вы можете захотеть проверить SqlCacheDependency Object .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...