Как пользовательский ASP.NET может управлять данными кэша без использования ViewState?
-
06-09-2019 - |
Вопрос
Я не уверен, возможно ли это в 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.
Если вы попробуете это и объедините это с отключением состояния просмотра для сетки, вы можете получить довольно простое решение.
Если вы не можете рассчитывать на сеанс кэширования, всегда есть какие-то альтернативные механизмы сохранения, которые могли бы выполнить эту работу.
Но с точки зрения дизайна данной ситуации я бы определенно выбрал подход к кэшированию данных.