2009-12-03 2 views
8

Есть ли у кого-нибудь идеи или рекомендации, которые они могли бы указать мне на оптимизацию видового представления моего приложения ASP.NET? Я не хочу отключать его вместе, и главная цель его оптимизации - ускорить работу, поэтому я не хочу запускать дорогостоящую функцию, чтобы рекурсивно отключить viewstate для определенных элементов управления, потому что эта функция замедлит работу время загрузки страницы, которая могла бы победить цель.Оптимизация ViewState

Любые идеи?

ответ

6

Я не могу сказать вам, кроме «не помещайте много в свой ViewState».

Место, где я бы искать оптимизации: вы добавили

  • Ничего ViewState себе
  • Больших объемов данных, связанные с элементами управления для отображения данных, как GridViews, <x>Lists и Repeaters.

GridViews особенно плохо осведомлены о ViewState; все, что вы вставляете в нее, так что если вы привяжете особенно большой список, ожидающий, что ASP.NET будет обрабатывать разбиение на страницы для вас, у вас будет огромный ViewState. Единственный способ обойти это - привязать только одну страницу к GridView, но это означает, что вам придется делать разбивку на части данных, которая может быть столь же болезненной, или отключить ViewState для GridView, что означает (возможно) полезные функции, такие как встроенное редактирование, больше недоступны.

Здесь нет серебряной пули.

+0

Сначала я пытался выяснить способ достичь VIEWSTATE системы оптимизации широкий, но чем больше я думаю об этом, тем больше я прихожу к выводу, что это должен быть контроль, по -контроля. Благодаря! – Adam

9

Вот некоторые идеи, как можно оптимизировать размер ViewState передается по проводу (copied from this answer):

  • Отключить ViewState для элементов управления, которые не нуждаются в ней (это наиболее эффективное решение). Например. если вы можете кэшировать некоторые данные на сервере, то вы можете повторно привязать любые элементы управления данными с каждым запросом, и не нужно сохранять все в ViewState.
  • Включить сжатие HTTP на сервере (IIS). Это уменьшает размер страницы, отправленной клиенту, включая ViewState.
  • Сжатие ViewState. Это имеет дополнительное преимущество перед сжатием HTTP: оно также уменьшает размер PostBacks (данные отправляются обратно на сервер), поскольку ViewState всегда отправляется обратно на сервер во время PostBack. Для этого существуют различные подходы. как показано в this blog post.
  • Храните ViewState на сервере вместо того, чтобы отправлять его в скрытое поле со страницей. Самый простой способ сделать это - использовать SesionPageStatePersister, но есть и другие решения, которые хранят ViewState на диске вместо использования сеанса (see here for example).
+0

Отлично! Благодаря! Знаете ли вы, что грубо говоря, если сжатие в представлении в представлении и сохранение состояния просмотра в сеансе дорогостоящее по мере выполнения сервера. Я по-прежнему собираюсь попробовать эти два в понедельник, чтобы проверить его с помощью моего приложения, но мне было интересно, были ли у вас хорошие/плохие впечатления от предыдущих в отношении того, насколько это замедляет работу сервера. – Adam

+0

Я использовал четвертый подход для веб-приложения, которое, как правило, создавало много ViewState. Приложение использовалось только небольшим количеством пользователей в любое время, поэтому в этом случае увеличение использования памяти не было проблемой. Я сделал некоторые тесты с третьим вариантом, но до сих пор не проводил никаких тестов/измерений (никогда не использовал его в производстве). Обычно я стараюсь как можно больше отключить/минимизировать ViewState (вариант 1). – M4N

+1

@Adam: сжатие Viewstate занимает больше CPU/RAM того, что я читаю – Shide

0

В таком случае, просто сохраните ViewState на самом сервере. Но у этого будет «дорогая» операция хранения, такая как вставка Cache/Database. Я смог уменьшить свои сайты на 200-300 КБ до 62 байт. Это стоило того.

Если вы хотите прочитать, как я расширил HiddenFieldPageStatePersister, вот он ..

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

Смежные вопросы