Как пользовательский ASP.NET может контролировать данные кэша без использования ViewState? - PullRequest
2 голосов
/ 24 февраля 2009

Я не уверен, возможно ли это в ASP.NET, но вот проблема, с которой я столкнулся: некоторые списки данных в моем веб-приложении отображаются с использованием GridView ; однако, поскольку некоторые из этих списков могут содержать большое количество данных, они иногда увеличивают вес страницы до нескольких мегабайт из-за ViewState . Поскольку мы не хотим запрашивать базу данных для этой информации каждый раз, когда на странице возникает постбэк, мне было интересно, есть ли способ, которым я мог бы кэшировать данные, переданные элементу управления на сервере, и затем обращаться к ним в следующий раз есть постбэк.

Так это вообще возможно? Если это так, может кто-нибудь указать мне в направлении получения дополнительной информации о том, как это сделать? Если это невозможно, у кого-нибудь есть предложения, как мне решить эту проблему?

Ответы [ 4 ]

3 голосов
/ 24 февраля 2009

Вы можете использовать другой магазин для вашего viewstate кроме страницы. Эта статья описывает некоторые методы для этого.

Суть этого заключается в переопределении SavePageStateToPersistenceMedium и LoadPageStateFromPersistenceMedium.

2 голосов
/ 24 февраля 2009

Вы можете попробовать отключить ViewState на GridView. Это часто можно сделать без ущерба для функциональности. Работает очень хорошо, если ваш GridView отображает только данные и не позволяет редактировать, обновлять, удалять и т.д.

http://www.pluralsight.com/main/screencasts/screencast.aspx?id=understanding-viewstate

EnableViewState="false"

Как правило, вы должны создать баланс между ViewState на клиенте и некоторым типом кэша на сервере. Не бойтесь повторно запрашивать вашу базу данных. Он может кэшировать данные довольно хорошо. Возможно, посмотрите на включение кэширования страниц. Я бы не вставлял все эти данные в сессию, которая имеет свои проблемы.

http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx

<%@ Page Language="C#" AutoEventWireup="true" ... %>
<%@ OutputCache ... %>
0 голосов
/ 25 февраля 2009

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

Если вы попробуете это и объедините это с отключением состояния просмотра для сетки, вы можете придумать довольно гладкое решение.

Если вы не можете рассчитывать на Session для кэширования, всегда есть несколько альтернативных механизмов сохранения, которые могут выполнить эту работу.

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

0 голосов
/ 24 февраля 2009

Вот пример того, как вы можете хранить Viewstate в локальных временных файлах: http://www.marklio.com/marklio/PermaLink.aspx?guid=af76f1a0-2d44-44c3-bfb5-029740b8e683

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...