Влияет ли длина ключа состояния представления на размер состояния представления?
Было высказано предположение, что размер ключей, используемых в ViewState, вызовет проблемы с производительностью, поскольку размер состояния представления будет больше и, следовательно, увеличит размер страницы, увеличивая тем самым визуализацию.
Хотя я могу видеть, что это тот случай, когда больший ключ может привести к увеличению размера состояния просмотра, я не уверен, что влияние будет таким значительным.
В качестве примера ViewState["MySpecialProperty"]
привести к большему ViewState, чем ViewState["x"]
? И если это так, то разница действительно достаточно значительна, чтобы быть проблемой в стандартном веб-приложении.
5 ответов
Длина ключа состояния представления влияет на размер состояния просмотра. Однако это только минимально. Из небольших тестов, которые я сделал на "MySpecialProperty" против "x", разница примерно на 20 символов. Также не то, чтобы это могло сложиться, если бы у вас были более длинные ключи.
Однако вы должны сосредоточиться на значениях, хранящихся в viewstate, а не на ключах, так как это займет намного больше места.
Некоторые ссылки:
Прямо изо рта лошади: MSDN ViewState
... Состояние просмотра страницы по умолчанию помещается в скрытое поле формы с именем __VIEWSTATE. Это скрытое поле формы может легко стать очень большим, порядка десятков килобайт. Мало того, что поле формы __VIEWSTATE вызывает медленную загрузку, но всякий раз, когда пользователь отправляет обратно веб-страницу, содержимое этого скрытого поля формы должно быть отправлено обратно в HTTP-запрос, что также увеличивает время запроса...
Стоимость просмотра штата
Ничто не приходит бесплатно, и состояние просмотра не является исключением. Состояние представления ASP.NET накладывает два снижения производительности при запросе веб-страницы ASP.NET:
- При всех посещениях страницы на этапе сохранения состояния просмотра класс Page собирает общее состояние просмотра для всех элементов управления в его иерархии элементов управления и сериализует состояние в строку в кодировке base-64. (Это строка, которая отправляется в скрытой форме __VIEWSTATE, поданной.) Аналогично, на обратных передачах этапу состояния загруженного представления необходимо десериализовать данные состояния сохраненного представления и обновить соответствующие элементы управления в иерархии элементов управления.
- Поле скрытой формы __VIEWSTATE добавляет веб-странице дополнительный размер, который клиент должен загрузить. Для некоторых страниц с большим состоянием просмотра это может быть десятки килобайт данных, что может потребовать несколько дополнительных секунд (или минут!) Для загрузки пользователями модема. Кроме того, при обратной отправке поле формы __VIEWSTATE необходимо отправлять обратно на веб-сервер в заголовках HTTP POST, тем самым увеличивая время запроса обратной передачи.
Если вы разрабатываете веб-сайт, к которому обычно обращаются пользователи, использующие модемное соединение, вы должны быть особенно обеспокоены тем, что состояние просмотра может добавить на страницу. К счастью, существует ряд методов, которые можно использовать для уменьшения размера состояния просмотра. Сначала мы увидим, как выборочно указывать, должен ли серверный элемент управления сохранять свое состояние просмотра. Если состояние элемента управления не требуется сохранять в постбэках, мы можем отключить отслеживание состояния просмотра для этого элемента управления, тем самым сохраняя дополнительные байты, которые в противном случае были бы добавлены этим элементом управления. После этого мы рассмотрим, как полностью удалить состояние просмотра из скрытых полей формы страницы, сохранив вместо этого состояние просмотра в файловой системе веб-сервера.
Например, ViewState["MySpecialProperty"] приводит к большему ViewState, чем ViewState["x"]?
Да, в результате ViewState
будет больше при кодировании пар ключ / значение.
Действительно ли разница достаточно значительна, чтобы вызывать беспокойство в стандартном веб-приложении?
ИМО, нет. Я бы больше беспокоился о том, сколько пар вы положили в ViewState
и действительно ли вам нужно передать эту информацию клиенту.
Ну да, это влияет на размер ViewState, поскольку вы упоминаете, что это не имеет значения, если вы добавляете только одну переменную в ViewState, с другой стороны, если вы начинаете писать переменные наподобиеx
чтение кода будет проблематичным, поэтому лучше иметь баланс в пользу читабельности кода
Прежде чем рассматривать подобные вещи для повышения производительности, создайте нагрузочные тесты и на основании результатов примите правильное решение.
Производительность ASPX-страниц очень важна, обратите внимание на правило 8 секунд
Однако вы можете попытаться улучшить производительность, связанную с ViewState, другими способами, в основном отключив ViewState для элементов управления, которые в этом не нуждаются.
Для дополнительной информации:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_View_State
По умолчанию данные о состоянии просмотра хранятся на странице в скрытом поле и кодируются с использованием кодировки base64. Кроме того, из данных создается хеш данных состояния просмотра с использованием ключа машинного кода аутентификации (MAC). Значение хеша добавляется к закодированным данным состояния просмотра, и результирующая строка сохраняется на странице.
Таким образом, вычисляя побайтово, да, ваше состояние просмотра будет длиннее, если вы используете более длинный ключ для своей записи, потому что больше символов должно быть преобразовано в base64. но это никогда не является большой проблемой, потому что размер ключа по сравнению с размером длины данных (обычно) очень мал.