オブジェクトの破棄に関するStefan Gossner の投稿と、 Cross method dispose patternsに関するこの質問を読んだ後、誤って SPWeb を再度開いてしまったことがわかりました。Stefan Gossner の投稿で、子オブジェクトの処理が終了したら SPWeb を破棄する必要があると述べていることを知っています。ただし、Microsoft のドキュメントには、SPListItemCollection オブジェクトのキャッシュについて言及されています。次のコードは正しいですか? 返された SPListItemCollection は SPWeb オブジェクトを再度開きますか? 確実に伝える方法はありますか?
// is this correct????
private SPListItemCollection GetListItems()
{
SPListItemCollection items = null;
try
{
using (SPSite site = new SPSite(GetListSiteUrl()))
{
using (SPWeb web = site.OpenWeb())
{
// retrieve the list
SPList list = web.Lists[_ListName];
// more code to create the query...
items = list.GetItems(query);
}
}
}
catch (Exception e)
{
// log error
}
return items;
}
編集 09/09/09
主にStefan Grossner の投稿のこの部分を参照しています。
このオブジェクトの子オブジェクトに最後にアクセスした後、SPWeb または SPSite オブジェクトを破棄する必要があります。
彼が言っていることは、以前に取得したSPWebを破棄した後にSPListItemCollectionを使用すると、SPWebが自動的に再度開かれるということだと思います。