我有一个 ItemUpdated 事件接收器在库上运行。一些非常基本的逻辑。这是我在做什么的要旨:

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

我想知道我是否需要处置我的 web 我创建的对象。我在ULS日志中获得6个条目:

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.

如果有的话,应该如何在事件接收器中处理SPWEB对象?我什至尝试过 web.Dispose() 最后,但是条目仍然出现。

编辑1

我提到日志中有6个条目,我相信这与我击中的断点数量相对应。由于某些逻辑,并非所有这些都会将其纳入上面的代码块。他们从不实例化 SPWeb 目的。

有帮助吗?

解决方案

确保,您禁用活动接收器中的事件。否则,事件每次调用item.updateoverwriteversion时都会触发。当SharePoint停止此递归时,可能会发生内存泄漏。

许可以下: CC-BY-SA归因
scroll top