Стратегии для уменьшения размера ViewState в asp.net - PullRequest
4 голосов
/ 22 декабря 2009

Я использую 'n' количество серверных элементов управления на своей странице. Сейчас я занимаюсь настройкой производительности и заметил, что мой ViewState слишком большой, и это замедляет мою страницу

Я знаю, ViewState размер может быть сжат Gzip. Любые другие предложения по снижению ViewState в asp.net. Я не хочу делать это в IIS, потому что мое веб-приложение размещено на общем сервере.

Ответы [ 6 ]

8 голосов
/ 22 декабря 2009

Предполагая, что размер viewstate является основной причиной "медлительности", я хотел бы предложить вам использовать более целостный подход.

У вас есть «n» число серверных элементов управления, вам нужны все «n» числа, чтобы быть серверными элементами управления, а не просто HTML?

Скажем, вам действительно нужны все n и все ли они должны иметь включенное viewstate?

Вот одна хорошая статья (если вы еще не читали), которая предоставляет больше идей: минимизация размера VIEWSTATE

5 голосов
/ 22 декабря 2009

EnableViewState = false; должен стать вашим другом.

Если вы используете viewstate ТОЛЬКО там, где вам нужно, вы можете сделать следующее:

  1. Переключите Labels на Literals, особенно если вы используете их в шаблонах. Ярлыки занимают гораздо больше просмотров.
  2. Попробуй уменьшить постбэки. Меньшее количество обратных передач заставит вас меньше использовать viewstate, поскольку вам не нужно будет перезагружать всю страницу. Например, используйте вызовы AJAX и записывайте данные с помощью манипуляций на стороне клиента.
  3. Используйте сеанс или кэширование для хранения больших объемов данных для сеток и тяжелых элементов управления данными. С каждой перезагрузкой просто заполняйте ее самостоятельно.
2 голосов
/ 17 апреля 2015

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

        protected override PageStatePersister PageStatePersister
    {
        get
        {
            return new SessionPageStatePersister(this);
        }
    }
2 голосов
/ 22 декабря 2009

Viewstates следует использовать только тогда, когда вам нужно запомнить состояние страницы между постбэками. Он используется для предотвращения дополнительного доступа к базе данных. Так что, если это не требуется в вашем контроле, используйте EnableViewState = False. Если ничто на вашей странице не требуется для просмотра состояния, вы можете отключить состояния просмотра для этой страницы, добавив EnableViewState = False в теге Page.

Если ваш сервер может себе это позволить, вы можете перенести данные в Sessions. Сделайте это, если это необходимо для обеспечения безопасности (состояние представления не должно содержать конфиденциальных данных), или если ваше представление содержит большое количество данных. Будьте осторожны, так как по умолчанию Sessions хранятся в памяти сервера. Следовательно, вы не хотите использовать это слишком много для больших данных, если ожидаете много одновременных пользователей. Однако вы можете изменить место хранения сеанса (то есть другого сервера).

0 голосов
/ 22 ноября 2011

Точно проблема, которая у меня была. Мне пришлось расширить HiddenFieldPageStatePersister и сохранить состояние просмотра в базе данных. Я написал целую статью, которая поможет вам.

http://ashishnangla.com/2011/07/21/reducing-size-of-viewstate-in-asp-net-webforms-by-writing-a-custom-viewstate-provider-pagestatepersister-part-12/

0 голосов
/ 22 декабря 2009

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

...