Pregunta

Estoy tratando de tomar una decisión acerca de cómo mostrar mis datos. Lo que tenemos ahora es una lista de los productos que se muestran en un repetidor. Pero para el código de mantenimiento He puesto mis artículos de productos en un control de usuario separado y cargarlos en un bucle con resultados db utilizando LoadControl.

El control del producto en sí es muy simple, sólo unas pocas propiedades públicas como el título, url, calificación, pero no estoy seguro de si esto afectará mi rendimiento. Hice un poco de lectura aquí y en foros y algunas personas dicen que no es la mejor práctica, especialmente si usted tiene más de 20 o 30 de estos controles.

Entonces, ¿es realmente un impacto en el rendimiento utilizando este método o permanece bien con alrededor de 10.000 visitas al día. ¿Alguna otra sugerencia son bienvenidos también.

¿Fue útil?

Solución

Hice algunas pruebas porque estaba interesado en esto también, y parece que hay como un impacto de rendimiento muy significativo en comparación con LoadControl crear instancias de una clase normal.

Probé la creación de 100.000 casos de una clase simple con una propiedad vs 100.000 casos de LoadControl carga de un nuevo control en blanco. Y fue de 16 ms para las clases vs 1950ms para el control de carga. Parece que hay un montón de gastos generales. Me di cuenta de que si he añadido más controles constituyentes para el control de usuario el tiempo de ocupación subió. (Esto es sólo la carga que en realidad no añadir los controles de la página o hacerlas)

¿Es suficiente un golpe de ser perceptible para un usuario? Probablemente no, a menos que vaya a cargar una gran cantidad de casos con LoadControl.

Otros consejos

creo que hacer un control de usuario separada para cada producto probablemente no es el mejor camino a seguir.

Sin embargo, ya se encuentra en parte donde tiene que ser para mi sugerencia.

¿Por qué no hacer una clase para su producto, con todas las propiedades que ya se ha definido en el control de usuario.

Cuando se recuperan los productos que visualizas, recuperar una colección de productos (bucle a través de los registros y crear la colección) (Lista por ejemplo), y el uso de la colección como el origen de datos para su repetidor.

Cuando se utiliza Page.LoadControl dentro de un bucle, separarlo en su propia función y esto le dirá ASP.Net en caché el control en lugar de cargarlo desde el disco cada vez.

Ejemplo: (VB)

Private Function LoadMyControl() As myCustomControl1
    Return Page.LoadControl("....")
End Function

Entonces ...

For each [....]
   Dim myCtrl1 as myCustomControl1 LoadMyControl()
   myCtrl1.prop1 = "blah"
   myPlaceholder1.Controls.Add(myCtrl1)
Next

Al encapsular dentro de una llamada a la función del motor de caché piensa que es el control mismo usuario (que lo es), y sólo tendrá acceso al disco de una vez, acelerándolo significativamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top