На заметку! Если вы программировали в ASP.NET 1.x, то наверняка заметили, что модель сериализации состояний вида в ASP.NET 2.0 отличается от таковой в ASP.NET 1.x. Вместо разделения значений с помощью точек с запятой и угловых скобок в ASP.NET 2.0 используются непечатаемые знаки, что делает разбиение строки более эффективным (поскольку сериализированные данные легче отличить от маркеров) и компактным. В ASP.NET 2.0 также уменьшается размер после сериализации для многих распространенных типов данных, включая булевские значения, целые числа и строки, повторяющиеся по несколько раз (что является распространенным явлением, поскольку разные элементы управления часто имеют одноименные свойства). Эти на первый взгляд незначительные различия могут оказать существенное влияние. В зависимости от количества разделителей в сериализированном состоянии вида и используемых типов данных, элемент управления с большим объемом данных может уменьшить размер состояния вида наполовину или даже больше.
Размер скрытого поля состояния вида не имеет пределов. Однако некоторые прокси-серверы и брандмауэры не пропускают страницы, если размер скрытых полей превышает определенное значение. Для решения этой проблемы можно воспользоваться разбиением состояния вида, предполагающим автоматическое разделение состояния вида на несколько полей, чтобы размеры скрытых полей не превышали заранее заданный предел.
Для использования состояния вида понадобится установить атрибут maxPageStateFieldLength элемента <pages> в файле web.config. Этим определяется максимальный размер состояния вида в байтах. Ниже показан пример определения размера состояния вида в 1 Кбайт:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<pages maxPageStateFieldLength = "1024" />
</system.web>
</configuration>
При запросе страницы, генерирующей более длинное состояние вида, создается несколько скрытых полей ввода:
<input type="hidden" name="__VIEWSTATEFIELDCOUNT" value="3" />
<input type="hidden" name="__VIEWSTATE" value="..." />
<input type="hidden" name="__VIEWSTATE1" value="..." />
<input type="hidden" name="__VIEWSTATE2" value="..." />
Следует помнить, что разбиение состояния вида является просто механизмом минимизации проблем с определенными прокси-серверами (что является относительно редким явлением). Разбиение состояния вида не улучшает производительность (наоборот, оно добавляет небольшие накладные расходы на дополнительную сериализацию). Для улучшения производительности следует стремиться к включению в состояние вида как можно меньшего объема информации.
предыдущая следующая страница оглавление
112