Похоже, что вы кэшируете весь набор данных для всех страниц, даже если вы представляете только одну страницу этих данных. Я бы изменил вашу нумерацию страниц, чтобы запрашивать данные только для текущей страницы, на которой находится пользователь.
Если запрос тяжелый, и вам не нужно постоянно вызывать его снова и снова, потому что существует много переходов по страницам (вы должны протестировать типичный шаблон использования), тогда я бы реализовал некоторый тип кэширования в конце веб-службы кешировать страницу за страницей (конкретным пользователем, если данные относятся к конкретному пользователю) и достаточно быстро истечь (например, через несколько минут).
Я думаю, вам нужно ограничить общий объем данных, с которыми вы имеете дело. Измените свой код, чтобы не возвращать лишние данные, которые могут никогда не понадобиться - это хорошее место для начала.
РЕДАКТИРОВАТЬ: На основе ваших комментариев:
- Вы не можете изменить веб-сервис
- Пользователь может манипулировать запросом путем фильтрации или сортировки
- Большой объем данных возвращается веб-службой
- Данные зависят от пользователя
Ну, я думаю, у вас есть идеальный случай для использования Session
тогда. Это может облагать налогом сервер с большими объемами пользователей и данных, поэтому вам может потребоваться реализовать некоторую логику для очистки данных из Session
и не ждать, пока они истекут (как на определенных целевых страницах, которые, как вы знаете, пользователь пойдет когда они будут завершены, очистите данные сеанса).
Вы действительно хотите получить это из ViewState
, потому что это огромная полоса пропускания. Просто посмотрите на свой физический размер страницы, и эти данные передаются взад-вперед при каждом действии. Перемещение на Session
исключит использование этой полосы пропускания и позволит вам делать все, что вам нужно.
Вы также можете посмотреть на данные, возвращаемые веб-сервисом, и сохранить их в пользовательском объекте, который вы делаете как можно более «тонким». Если вы сохраняете DataSet
или DataTable
в своем Session
, эти объекты имеют некоторые дополнительные издержки, которые вам, вероятно, не нужны, поэтому сохраняйте данные в виде массива некоторого пользовательского тонкого объекта и просто привязывайте к нему. Вам нужно будет отобразить результат из WS на ваш пользовательский объект, но это хороший вариант, когда вы сокращаете использование памяти.
Дайте мне знать, если что-то еще мне не хватает.