Después de leer Stefan Gossner's post por la eliminación de objetos y de esta pregunta acerca de Cross method dispose patterns, descubrí que yo era culpable de reabrir accidentalmente algunos SPWebs. Sé en la publicación de Stefan Gossner que menciona que debe deshacerse de un SPWeb después de que haya terminado con cualquier objeto secundario. Sin embargo, el microsoft documentation menciona el almacenamiento en memoria caché del objeto SPListItemCollection. Es el siguiente código correcto? ¿Volvería la SPListItemCollection devuelta a abrir un objeto SPWeb? ¿Hay alguna manera de decirlo con certeza?¿El uso de un SPListItemCollection de regresar de una función de reabrir el SPWeb?
// is this correct????
private SPListItemCollection GetListItems()
{
SPListItemCollection items = null;
try
{
using (SPSite site = new SPSite(GetListSiteUrl()))
{
using (SPWeb web = site.OpenWeb())
{
// retrieve the list
SPList list = web.Lists[_ListName];
// more code to create the query...
items = list.GetItems(query);
}
}
}
catch (Exception e)
{
// log error
}
return items;
}
Editar 09/09/09
Me refiero principalmente a esta parte de Stefan Grossner's post:
Debe disponer de un SPWeb o SPSite objeto después del último acceso a una objeto secundario de este objeto.
creo que lo que está diciendo es que si uso el SPListItemCollection después de disponer de los SPWeb que utiliza para conseguirlo ... el SPWeb se volverá a abrir automáticamente.
probablemente podría hacerlo utilizando Acción <>, pero no creo que la acción podría cambiar nunca ... Creo que contradice el objetivo de la acción <>? Probablemente sólo hay que mover todo el código utilizando el SPListItemCollection interior de las GetListItems() la función sólo para estar seguro. –