オブジェクトを処分することについてStefan Gossner's postを読んだ後、Cross method dispose patternsについてこの質問をしたところ、私は誤っていくつかのSPWebsを再開したという罪悪感を知りました。私はStefan Gossnerの投稿で、あなたが何らかの子オブジェクトを終えた後にSPWebを処分すべきだと言います。ただし、microsoft documentationにはSPListItemCollectionオブジェクトのキャッシュが含まれています。次のコードは正しいですか?返されたSPListItemCollectionはSPWebオブジェクトを再度開きますか?確かに言う方法はありますか?関数から返された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's postのこの部分を参照しています
:あなたが最後にアクセスした後、SPWebやSPSiteオブジェクト オブジェクトを配置する必要があり
このオブジェクトの子オブジェクトです。
私がSPAWebを処分した後にSPListItemCollectionを使用すると、SPWebが自動的に再開されるという彼の主張を信じています。私の知る限り答えはノーですが、私はあなたが(代理人)に沿ってメソッドを送信する必要があり、このメソッドを呼び出すために、これを行うことにより
private void FetchItems(Action<SPListItemCollection> action)
{
using(...)
{
var items = list.GetItems(query);
action(items);
}
}
のようなコードに何かを書いているだろうことを知っているよう
私はアクション<>を使用している可能性がありますが、アクションが変更されるとは思わない...私はアクション<>の目的を破ると思いますか?おそらく、GetListItems()関数内のSPListItemCollectionを使用してコードをすべて安全に移動する必要があります。 –