Domanda

Sto solo cercando un po ' di controllo di sanità mentale su questo!

Sto guardando molte classi che hanno SPSite o SPWeb come costruttore per la classe.

La classe viene istanziata usando SPContext.Site come parametro SPSite

ad es.

public MyClass {
  SPWeb _web;
  public MyClass(SPSite site) {
    _web = site.RootWeb;
  }
  // Other methods that make use of _web
}

Dovere _web essere smaltiti?È _web solo un puntatore a SPContext.Sito.RootWeb o c'è un'altra copia di SPWeb che devono essere smaltiti?

Lo so con SPContext.Site.OpenWeb() dovresti chiamare Dispose().

Quindi, per quanto riguarda l'utilizzo di cui sopra?

Passerà SPSite / SPWeb come assegnarlo a una variabile locale sempre solo avere il riferimento alla stessa SPContext ?

È stato utile?

Soluzione

Nel tuo caso _web non ha bisogno di essere smaltito come si sta ottenendo dal RootWeb e oggetti web recuperati da RootWeb non deve essere smaltito.

EIDT

Inoltre, se il SPSite l'oggetto passato come parametro al costruttore è derivato dal SPContext, non ha bisogno di esser smaltito.Altrimenti deve essere disposto nella classe chiamata o dalla classe chiamante a seconda del requisito.

Altri suggerimenti

Non chiamare esplicitamente Dispose () sullo SPSite.Proprietà RootWeb.La pulizia di dispose verrà gestita automaticamente da SharePoint e. NET Framework.Per le personalizzazioni di SharePoint esistenti, si consiglia di rimuovere explicit Rootweb Dispose per evitare una condizione di casi limite in cui SPContext.Attuale.Web ha l'uguaglianza con lo SPSite.RootWeb.Possono verificarsi problemi durante lo smaltimento di RootWeb quando ottenuto da qualsiasi variazione di SPContext (ad esempio:SPContext.Sito.RootWeb, SPContext.Attuale.Sito.RootWeb e GetContextSite (Contesto).RootWeb).

Per più visita...MSDN

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top