2012-06-01 57 views
0
using (var web = SPContext.Current.Site.RootWeb) 
{ 
    //Some code 
} 

的SPDisposeCheck工具告訴我不要丟棄這個對象的 - 但我認爲這是一個最好的例子,你應該處置的SP對象!?從SPDisposeCheckSPDisposeCheck告訴我不要丟棄一個的SharePoint Web

輸出:

注:配置不應該叫這個對象上。 初始分配:網絡:= Microsoft.SharePoint.SPContext.get_Current(){} Microsoft.SharePoint.SPContext get_Site(){} Microsoft.SharePoint.SPSite get_RootWeb()

回答

1

的SPContext對象住整個請求的生命週期。如果您處置它的內部Web或Site屬性,則會在請求生命週期的後期中斷其他可能請求此屬性的SharePoint組件。

簡單來說,只處理您創建的網站和網站。不是由SharePoint引擎管理的。

PS:你是否考慮過在http://sharepoint.stackexchange.com上發帖?

+0

感謝您的回答。我真的不明白什麼時候程序員可能會創建一個需要處置的新網站?不是他們(即共享點的內部對象)是否都通過引用傳遞? +1。 –

+1

您必須在多種情況下創建SPWeb對象,包括:運行RunWithElevatedPrivileges,在Web應用程序(控制檯應用程序,計時器作業)之外工作,使用另一個SPWeb而不是當前工作站等。 –

+0

但即使您引用其他Web其他而不是當前的 - 它仍然是一個已經存在的 - 所以處理它可能會以同樣的方式影響對象模型中的任何其他依賴項。 (如果這就是你不處理RootWeb的原因)。再次感謝。 –

-1

這真的是對的嗎? 如果你看一下SPSite.RootWeb代碼,它看起來像這樣:

public SPWeb RootWeb 
{ 
    get 
    { 
     if (this.m_rootWeb == null) 
     { 
      this.m_rootWeb = this.OpenWeb(this.ServerRelativeUrl); 
      this.m_rootWebCreated = true; 
     } 
     return this.m_rootWeb; 
    } 
} 

它實際上做了OpenWeb然後你應該處理它。或者我錯了?

相關問題