在閱讀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 對象 此對象的子對象。
我相信他所說的是,如果我在處理SPWeb時使用了SPListItemCollection,那麼我將會自動重新打開SPWeb。
我可以使用Action <>來實現它,但我不認爲這個動作會改變......我認爲這會破壞Action <>的目的?我可能只需要使用GetListItems()函數內部的SPListItemCollection來移動所有代碼,以確保安全。 – 2009-09-08 19:49:45