Кэширование данных ListView - жизнеспособный вариант?

Вот мой сценарий: 1) Пользователь запускает поиск для получения значений для отображения в ListView через LinqDataSource. 2) Они нажимают на один из элементов, который переводит их на другую страницу, где можно изучить подробности, выполнить дальнейшую детализацию и т. д. 3) Пользователь хочет вернуться к исходным результатам ListView, чтобы выбрать другой элемент для проверки.

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

Однако, поскольку я использую LinqDataSource, я считаю, что фактические результаты извлекаются каждый раз при выполнении запроса. В настоящее время я подаю тип IEnumerable «выберите новый {бла, бла}» для e.Results, который нельзя превратить в список, поскольку он заполнен анонимными типами.

Вкратце: 1) Имеет ли смысл пытаться размещать потенциально большие результаты запроса в сеансе пользователей? 2) Если это так, является ли список разумной структурой данных? 3) Нужно ли мне прибегать к чему-то вроде создания класса с правильными свойствами для хранения анонимных данных, перечисления возврата запроса, заполнения списка? 4) Есть ли лучший вариант, чем LinqDataSource для этой цели? 5) Или имеет смысл запускать запрос каждый раз, когда они попадают в ListView?

Прошу прощения, если это было неясно. Я был бы очень признателен, если бы кто-нибудь смог меня поправить, прежде чем я истрачу кучу своего свободного времени по ложному пути :)


person Keith Myers    schedule 28.05.2009    source источник
comment
Я должен отметить, что данные будут специфичны для поиска каждого клиента.   -  person Keith Myers    schedule 29.05.2009


Ответы (2)


Во-первых, я бы посоветовал вам изучить механизм кэширования , который поставляется с ASP.NET, если только данные не являются частными для определенного пользователя.

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

Измерьте, сколько времени фактически тратится на извлечение данных, и используйте кэширование в тех случаях, когда это имеет значение.

person Fredrik Mörk    schedule 28.05.2009
comment
+1, хотя я бы поменял местами два пункта. :) Обязательно запускайте запрос каждый раз, когда они попадают в представление списка, пока не будет доказано, что это проблема. Современная СУБД может обрабатывать гораздо больше, чем многие думают, и часто предоставляет собственный уровень кэширования! - person Jeff Sternal; 03.11.2009

Я не уверен, что воскрешать темы из мертвых - это круто на SO, но вот что я нашел, чтобы ответить на этот вопрос:

http://weblogs.asp.net/pwelter34/archive/2007/08.aspx

person jeffesp    schedule 03.11.2009