2012-01-31 3 views
0

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

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

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

Сценарий № 1:

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

Сценарий № 2:

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

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

+0

Два быстрых вопроса: 1) Сколько перекрытий существует в трех вызовах БД? Имеют ли элементы управления общие данные?, 2) Возможно ли, чтобы элементы управления могли отложить обратно на db, или все три элемента управления * всегда * загружены? – GrayWizardx

ответ

1

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

Вы, очевидно, понимаете, как работает кэширование выходных данных, и как его различные версии HTML могут кэшироваться в зависимости от запроса url (query).

+0

Спасибо за совет. –

0

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

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

+0

Спасибо, я буду помнить об этом. –

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