2010-07-06 2 views
3

Я решил большинство проблем, которые у меня были с кешированием. Но все-таки есть одно. У меня есть UserControl, для которого я использую кэширование вывода. Так же, как это:ASP.NET воссоздающий кешированный контроль

<%@ OutputCache Duration="1200" VaryByParam="none" %> 

Однако, как вы можете видеть, управление воссозданы каждые 12 минут, потому что это занимает от 5 до 10 секунд, чтобы произвести его.

Теперь по умолчанию для ASP.NET по умолчанию требуется создать элемент управления, когда пользователь вводит страницу и сохраняет ее в кеше в течение 12 минут. Затем, когда через 5 минут пользователь переходит на страницу, элемент управления создается снова.

Есть ли способ заставить ASP.NET воссоздать элемент управления после истечения 12-минутного кеша? Независимо от следующего визита пользователя?

Или даже идеальное решение: воссоздать управление в фоновом режиме, если скажем 11 минут 50 секунд, а затем заменить только один на новый через 12 минут?

Спасибо за помощь!

+1

Разве это не пустая трата? Если пользователь не приходит на страницу с контролем, зачем его перезагружать? в любом случае какой контроль, есть ли там БД? – eugeneK

+0

Да, он вызывает БД, но связь БД кэшируется механизмом кэша. Сама логика управления занимает много времени. И я больше не могу уменьшить эту логику. – Adam

ответ

1

Используйте Windows Scheduled Tasks для входа в эту страницу каждые 12 минут, потому что ASP.NET работает только с триггерами. Триггер может быть либо Ajax, который запрашивает другую страницу каждые 12 минут, либо следующий пользователь, который приходит на вашу веб-страницу.

+0

Я думал об этом, но я не уверен, что это единственное возможное/лучшее решение в этом случае. – Adam

+0

@Adam, какой контроль делает? Может быть, вы можете переместить часть его из-под контроля, а Cache - только часть? – eugeneK

+0

К сожалению, управление создает множество элементов управления (метки, div) и добавляет их в другие элементы управления в элементе управления. И я не могу кэшировать элементы управления вне элемента управления - потому что добавление кэшированного HTML с помощью метода Controls.Add() закончится исключением. – Adam

0

Я не уверен, но похоже, что вы хотите, чтобы ваш контроль обновлялся асинхронно с интервалом времени, пока пользователь просматривает страницу?

Если это так, вам необходимо использовать Ajax. Например, элемент управления Timer позволяет асинхронно обновлять UpdatePanels с установленными интервалами.

Кстати, продолжительность вашего пребывания в вашем примере составляет 20 минут.

 Смежные вопросы

  • Нет связанных вопросов^_^