Domanda

Ho un ricevitore di eventi ItemUpdated in esecuzione su una libreria. Una logica piuttosto semplice. Ecco l'essenza di quello che sto facendo:

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");
        }
    }
}

Mi chiedo se ho bisogno di essere lo smaltimento mio oggetto web qui che ho creato. Ottengo 6 voci nel registro 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.

Come dovrebbe SPWeb oggetti essere smaltito in un ricevitore di eventi, se non del tutto? Ho anche provato a mettere web.Dispose() alla fine, ma le voci mostrano ancora in piedi.

Modifica 1

ho detto che ci sono 6 voci nei registri, e credo che corrisponde al numero di punti di rottura mi ha colpito. Non tutti 6 di questi sarebbe fare al blocco di codice di cui sopra a causa di una certa logica. Non hanno mai un'istanza di un oggetto SPWeb.

È stato utile?

Soluzione

Assicurati, si disattiva il fireing evento nella vostra ricevitore di eventi. In caso contrario, l'evento verrà generato ogni volta che si chiama item.UpdateOverwriteVersion. La perdita di memoria potrebbe verificarsi quando SharePoint ferma questa ricorsione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top