Как пользовательский ASP.NET может управлять данными кэша без использования ViewState?

StackOverflow https://stackoverflow.com/questions/583447

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

Вы могли бы попробовать отключить 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 ... %>

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top