Вопрос

у меня есть 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 объект здесь, который я создал. Я получаю 6 записей в журнале 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.

Как объекты SPWEB должны быть утилизированы в приемнике событий, если вообще? Я даже пытался положить web.Dispose() В конце, но записи все еще появляются.

Редактировать 1

Я упомянул, что в журналах есть 6 записей, и я считаю, что это соответствует количеству точек разрыва, которые я набил. Не все 6 из них будут добраться до кодового блока выше из -за какой -то логики. Они никогда не создают создания SPWeb объект.

Это было полезно?

Решение

Убедитесь, что вы отключите мероприятие, которое уволяет в вашем приемнике. В противном случае событие будет снимать каждый раз, когда вы называете item.updateoverwriteversion. Утечка памяти может произойти, когда SharePoint останавливает эту рекурсию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top