Usando SPWeb.Lists[“”] Vs SPWeb.GetList()


Nunca dejas de aprender algo nuevo. A veces, te acostumbras a hacer algo de una forma, y no te paras a pensar en el rendimiento, y en cómo se puede ver afectado, ves por internet que la forma de la que usas funcionará y encima luego el código lo hace y piensas que debe ser la mejor forma de hacer algo. Es lo que pensaba hasta ayer con el acceso a las listas de SharePoint a través del código.

Habitualmente siempre lo venía haciendo de la siguiente manera:

using(SPSite site = new SPSite(SPContext.Current.Site.Url))
{
     using(SPWeb web = site.OpenWeb())
     {
          SPList lista = web.Lists["listaEjemplo"];
     }
}

Nunca había parado a reparar en el rendimiento de este tipo de accesos o no, simplemente consideraba que era la forma correcta de hacerlo, hasta ayer.

A partir de una sugerencia he empezado a indagar un poco y he podido ver que esta forma puede provocar problemas de rendimiento en proyectos que tengan una gran cantidad de listas. El motivo lo podéis encontrar en el siguiente enlace que os pongo, aunque después intentaré explicarlo brevemente:

http://blogs.msdn.com/b/sowmyancs/archive/2008/10/26/best-practices-sharepoint-object-model-for-performance-tuning.aspx

Lo que podréis ver que explica en este enlace es muy sencillo. Utilizando este método para el acceso a listas, el sistema funciona de la siguiente manera. Inicialmente carga los metadatos (estos es, toda la información sobre esas listas) de todas las listas que hay en el sitio y posteriormente va evaluando el campo “Title” de la lista contra el que le hemos indicado, hasta encontrar la correcta. Evidentemente esto no tiene por qué ser muy perjudicial en proyectos con pocas listas, pero puede comprometer nuestro rendimiento en proyectos muy grandes.

Otra forma de acceso a las listas que mejora el rendimiento es el siguiente:

using(SPSite site = new SPSite(SPContext.Current.Site.Url))
{
     using(SPWeb web = site.OpenWeb())
     {
          SPList lista = web.GetList("http://Site/list/AllItem.aspx");
     }
}

La diferencia con respecto a lo anterior, radica principalmente en que con esta forma, a partir de la URL se recupera el GUID concreto de esa lista y después se obtienen los metadatos de esa lista concreta.

Imaginad la diferencia cuando nos encontramos en un escenario con muchas listas de usar los dos métodos.

Intentaré a partir de hoy, usar este método para obtener listas.

Como estoy hablando de buenas prácticas o mejores prácticas, os voy a poner algunos enlaces sobre buenas prácticas, que aunque pueden parecer algo antiguos, explican cosas muy útiles, yo le he echado un vistazo hoy y espero empezar a poner cosas en práctica en breve, por lo menos aquellas cosas que no estuviera haciendo ya XD.

http://msdn.microsoft.com/en-us/library/bb687949.aspx

http://msdn.microsoft.com/en-us/library/aa973248.aspx

http://blogs.msdn.com/b/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx

Anuncios

Un comentario en “Usando SPWeb.Lists[“”] Vs SPWeb.GetList()

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s