Question

J'ai un récepteur d'événements ItemUpdated en cours d'exécution sur une bibliothèque. Une logique assez basique. Voici l'essentiel de ce que je fais:

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

Je me demande si je dois être disposer mon objet web ici que j'ai créé. Je reçois 6 entrées dans le journal 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.

Comment les objets SPWeb être disposé dans un récepteur de l'événement, le cas échéant? J'ai même essayé de mettre web.Dispose() à la fin, mais les entrées encore apparaître.

Modifier 1

je l'ai mentionné qu'il ya 6 entrées dans les journaux, et je crois que correspond au nombre de points de rupture je frappe. Pas tous les 6 de ces commettraient au bloc de code ci-dessus en raison d'une logique. Ils n'instancier un objet SPWeb.

Était-ce utile?

La solution

Assurez-vous, vous désactivez le fireing d'événement dans votre récepteur d'événements. Sinon, l'événement se déclenche chaque fois que vous appelez item.UpdateOverwriteVersion. La fuite de mémoire peut se produire lorsque SharePoint arrête cette récursivité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top