2009-12-03 9 views
8

¿Alguien tiene alguna idea o referencia a la que puedan dirigirme con respecto a la optimización de viewstate de mi aplicación ASP .NET? No quiero apagarlo todo junto, y el objetivo principal de optimizarlo es acelerar el rendimiento, así que no quiero ejecutar una función costosa para deshabilitar recursivamente el ViewState para ciertos controles porque esa función ralentizaría el rendimiento. tiempo de carga de la página que vencería el propósito.Optimización de ViewState

¿Alguna idea?

Respuesta

6

No hay mucho que pueda decir, excepto "no ponga mucho en su ViewState".

Lugares buscaría optimizaciones:

  • Cualquier cosa que ha añadido al estado de vista a sí mismo
  • grandes cantidades de datos con destino a los controles de visualización de datos como GridViews, <x>Lists y Repeaters.

GridViews son particularmente malas acerca de ViewState; todo lo que enlaza con los datos entra en él, de modo que si enlaza una lista particularmente grande esperando que ASP.NET maneje la paginación para usted, tendrá un enorme ViewState. La única forma de evitar esto es vincular solo una página a la vez al GridView, pero eso significa que tendrá que hacer la paginación del lado de los datos que puede ser igual de dolorosa, o desactivar ViewState para el GridView, que medios (posiblemente) funciones útiles como la edición en línea ya no están disponibles.

No hay ninguna bala de plata aquí.

+0

Al principio yo estaba tratando de encontrar una manera de lograr la optimización del sistema de estado de vista de ancho, pero cuanto más pienso en ello, más que estoy llegando a la conclusión de que este tendrá que ser un control por -control cosa. ¡Gracias! – Adam

9

Aquí están algunas ideas de cómo se puede optimizar el tamaño de ViewState transferido sobre el alambre (copied from this answer):

  • Desactivar ViewState para controles que no lo necesitan (esta es la solución más eficaz). P.ej. si puede almacenar en caché algunos datos en el servidor, puede volver a enlazar cualquier control de datos con cada solicitud y no es necesario guardar todo en ViewState.
  • Activar la compresión HTTP en el servidor (IIS). Esto reduce el tamaño de la página enviada al cliente, incluido ViewState.
  • Comprima el ViewState. Esto tiene una ventaja adicional sobre la compresión HTTP: también reduce el tamaño de PostBacks (datos enviados al servidor), ya que ViewState siempre se envía de vuelta al servidor durante un PostBack. Hay varios enfoques para esto, p. como se muestra en this blog post.
  • Almacene el ViewState en el servidor en lugar de enviarlo en un campo oculto con la página. La forma más fácil de hacerlo es usar el SesionPageStatePersister, pero hay otras soluciones que almacenan el ViewState en el disco en lugar de usar la sesión (see here for example).
+0

¡Genial! ¡Gracias! ¿Sabe aproximadamente si la compresión de viewstate y el almacenamiento de viewstate en la sesión son caros en lo que respecta a la ejecución del servidor? Todavía voy a probar esos dos el lunes solo para probarlo con mi aplicación, pero me preguntaba si has tenido buenas/malas experiencias con aquellos en el pasado con respecto a cuánto ralentiza el servidor. – Adam

+0

He utilizado el cuarto enfoque para una aplicación web que tendía a producir gran cantidad de ViewState. La aplicación solo fue utilizada por un pequeño número de usuarios en cualquier momento, por lo que en ese caso el aumento en el uso de la memoria no fue un problema. Hice algunas pruebas con la tercera opción, pero hasta ahora no he hecho ninguna prueba/medición (nunca la he usado en producción). En general, trato de desactivar/minimizar ViewState tanto como sea posible (opción 1). – M4N

+1

@Adam: la compresión de Viewstate requiere más CPU/RAM de lo que leo – Shide

0

Bueno, en ese caso, simplemente mantenga el ViewState en el servidor. Pero eso tendrá una operación de almacenamiento 'cara' como una inserción de Caché/Base de Datos. Pude reducir mis sitios de 200-300KB viewstates a 62 bytes. Valió la pena por completo.

Si desea leer sobre cómo extendí HiddenFieldPageStatePersister, aquí está ..

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