Кэширование вывода ASP.NET против кеширования объектов ASP.NET - PullRequest
0 голосов
/ 01 февраля 2012

Не могли бы вы помочь мне решить, какой из следующих сценариев будет работать лучше всего.

У меня есть 3 пользовательских элемента управления.Каждый элемент управления должен генерировать контент на основе результатов запроса SQL Server, например, пользовательский элемент управления # 1 заполняет представление grid с выходными данными запроса.

Я хочу использовать кэширование, чтобы уменьшить количество циклов.поездки в мою базу данных SQL Server.Я предложил следующие два решения и хотел бы знать, какое из них будет работать лучше.

Сценарий № 1:

Поместите все 3 запроса пользовательского элемента управления в одну хранимую процедуру SQL Server.(Пакетная обработка), выполните хранимую процедуру вне пользовательских элементов управления внутри содержащей страницы, а затем предоставьте каждому пользовательскому элементу управления свой запрос.Количество обращений к базе данных будет сокращено за счет размещения всех трех запросов в одной хранимой процедуре.
Кэширование в этом сценарии будет происходить путем кэширования вывода хранимой процедуры.Следовательно, выходные данные хранимой процедуры будут извлекаться из памяти каждый раз, чтобы предоставить каждому пользовательскому элементу управления свои выходные данные, после чего каждый пользовательский элемент управления будет генерировать свои выходные данные.Приблизительно 188 различных версий запроса будут кэшироваться объектным кэшированием ASP.NET.

Сценарий № 2:

Запросите базу данных SQL Server индивидуально внутри каждого пользовательского элемента управления, а затем сгенерируйте каждого пользователявывод элемента управления с результатами запроса, которые каждый получил.Это означает, что каждый пользовательский элемент управления будет отдельно вызывать базу данных SQL Server.Кэширование в этом сценарии будет происходить путем кэширования вывода каждого пользовательского элемента управления, поэтому пользовательским элементам управления не придется каждый раз генерировать свои выходные данные, и они могут получать свои выходные данные непосредственно из памяти.Подвох в этом сценарии заключается в том, что мне придется кэшировать около 188 различных версий одного или нескольких пользовательских элементов управления.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

В любом случае вам придется кэшировать 188 версий данных.Мой голос был бы: кеширование вывода - потому что для генерации HTML требуется меньше обработки (то есть для включения в страницу aspx; что, в конце концов, и является конечной целью), по сравнению с достижением почти точно того же самого, если в памятикэширование выполняется (только с большим временем обработки, поскольку кэшированные данные должны будут преобразовываться в HTML каждый каждый раз, когда их запрашивает один пользователь, что будет гораздо больше, чем 188 раз).

Очевидно, вы понимаете, как работает кэширование вывода и как его можно кэшировать в разных версиях HTML в зависимости от URL-адреса запроса (запроса).

0 голосов
/ 01 февраля 2012

Я не вижу двух сценариев как обязательно взаимоисключающих.Не должно быть никаких причин, по которым вы не можете извлечь логику SQL-запроса и затем использовать кэширование вывода с элементами управления, если хотите.

Опять же, в действительности все будет значительно различаться в зависимости от того, как часто данные меняются и как дорого получать данные для начала.Например, в вашем вопросе ничего не говорится о том, что вы не можете сделать один вызов БД, чтобы получить все данные (для всех версий) и сохранить их в кэше приложения, а затем сгенерировать необходимые элементы управления.

...