質問

を持っています 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つのエントリがあると述べましたが、それは私がヒットしたブレークポイントの数に対応していると思います。これらの6つすべてが、ロジックのために上記のコードブロックに到達するわけではありません。彼らは決してインスタンス化しません SPWeb 物体。

役に立ちましたか?

解決

確かに、イベントレシーバーでイベントが発送されることを無効にしてください。それ以外の場合、イベントはitem.updateOverwriteversionを呼び出すたびに発生します。 SharePointがこの再帰を停止すると、メモリリークが発生する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top