Pregunta

Yo tengo un ItemUpdated Receptor de eventos que se ejecuta en una biblioteca. Alguna lógica bastante básica. Aquí está la esencia de lo que estoy haciendo:

SPWeb web = properties.Web;

SPContentTypeId ParentCT_Id = web.AvailableContentTypes["Some Content Type"].Id;

if (ParentCT_Id != null)
{
    if (properties.ListItem.ContentTypeId.IsChildOf(ParentCT_Id))
    {
        if (properties.ListItem[RECORD_END_DATE] != null)
        {
            SPListItem item = properties.ListItem;

            item.File.CheckOut();

            DateTime endDate = (DateTime)item[RECORD_END_DATE];
            item[RECORD_YEAR_END_DATE] = string.Format("12/31/{0}", endDate.Year.ToString());
            item.UpdateOverwriteVersion();

            item.File.CheckIn(RECORD_YEAR_END_DATE + " has been updated");
        }
    }
}

Me pregunto si necesito estar eliminando mi web Objeto aquí que creé. Recibo 6 entradas en el registro de ULS:

An SPRequest object was not disposed before the end of this thread. To avoid wasting system resources, dispose of this object or its parent (such as an SPSite or SPWeb) as soon as you are done using it. This object will now be disposed.

¿Cómo se deben eliminar los objetos SPWEB en un receptor de eventos, si es que lo hacen? Incluso he intentado poner web.Dispose() Al final, pero las entradas aún aparecen.

Edición 1

Mencioné que hay 6 entradas en los registros, y creo que eso corresponde a la cantidad de puntos de descanso que golpeé. No todos los 6 de estos llegarían al bloque de código anterior debido a alguna lógica. Nunca instancian un SPWeb objeto.

¿Fue útil?

Solución

Asegúrese de deshabilitar el evento de despido en su receptor de eventos. De lo contrario, el evento disparará cada vez que llame a elemento. La fuga de memoria podría ocurrir cuando SharePoint detiene esta recursión.

Licenciado bajo: CC-BY-SA con atribución
scroll top