Pregunta

¡Solo estoy buscando un poco de control de cordura en este!

Estoy viendo muchas clases que tienen SPSite o SPWeb como constructor de la clase.

La clase se crea una instancia usando SPContext.Site como parámetro SPSite

p.ej.

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

Debería _web ser eliminado?¿_web es solo un puntero a SPContext.Site.RootWeb o hay otra copia de SPWeb que hay que eliminar?

lo sé con SPContext.Site.OpenWeb() deberías llamar Dispose().

Entonces, ¿qué pasa con el uso anterior?

pasará SPSite / SPWeb como asignarlo a una variable local siempre solo tiene la referencia a la misma SPContext ?

¿Fue útil?

Solución

En tu caso _web No es necesario desecharlo, ya que lo obtendrá del RootWeb y objetos web recuperados de RootWeb no es necesario eliminarlo.

EIDT

Además, si el SPSite El objeto pasado como parámetro al constructor se deriva del SPContext, no es necesario desecharlo.De lo contrario, debe eliminarse en la clase llamada o desde la clase que llama, según el requisito.

Otros consejos

No llame explícitamente a Dispose() en la propiedad SPSite.RootWeb.La limpieza de eliminación será manejada automáticamente por SharePoint y .NET framework.Para las personalizaciones existentes de SharePoint, se recomienda la eliminación de RootWeb Dispose explícito para evitar una condición de caso límite en la que SPContext.Current.Web tiene igualdad con SPSite.RootWeb.Pueden ocurrir problemas al desechar RootWeb cuando se obtiene de cualquier variación de SPContext (por ejemplo:SPContext.Site.RootWeb, SPContext.Current.Site.RootWeb y GetContextSite(Context).RootWeb).

Para más visita...MSDN

Licenciado bajo: CC-BY-SA con atribución
scroll top