¿Debo deshacerme de Spweb o Splist?
-
16-10-2019 - |
Pregunta
Estoy haciendo un montón de cosas con un spweb y muchas espaldas. Si acabo de deshacerme de la web en el finally
¿Sección que eliminaría todas las espaldas que instancié? (por cierto, entiendo el concepto de using
, entonces debo implementar using
¿en cambio?)
Solución
Los objetos de esplistro no se pueden disputar.
Otros consejos
Recomiendo instalar y ejecutar esta herramienta para verificar si está eliminando sus objetos correctamente: SpdisposeCheck
La regla es complicada, pero en pocas palabras, debe deshacerse de cualquier objeto que cree usted mismo que implementa el Idisible interfaz.
En el contexto de SharePoint, esto incluye:
- Ningún SPSIT Objeto que crea usando
siteColl.OpenWeb()
, devuelto porSPSiteCollection.Add
, por elSPSiteCollection[]
operador de índice, o cedido en unSPSiteCollection
foreach
círculo - Ningún Spweb objeto devuelto de
SPSite.AllWebs.Add
,SPWebCollection.Add
, laSPSite.AllWebs[]
operador de índice o cedido en unSPSite.AllWebs
bucle foreach.
Hay muchos más casos descritos en el Mejores prácticas: Uso del artículo de objetos de servicio de Windows SharePoint desechables en Technet.
Tenga en cuenta que Espalda no está en esta lista (porque no implementa IDisposable
, ni es Splist.rootweb (Debido a que no crea el objeto Rootweb, solo obtiene una referencia).
Tenga en cuenta que es poco probable que su código se compile si intenta Dispose
un objeto como SPList
que no implementa IDisposable
, porque ese objeto no tendrá un Dispose
método. Por otro lado, no recibirá un error si intenta deshacerse de RootWeb
, porque es un SPWeb
objeto con un Dispose
Método: pero hacer esto causará problemas si intenta consultar esa web o cualquiera de sus hijos más adelante en su código.
los using
La declaración es un poco de azúcar sintáctica, pero prefiero usarla porque asegura que el objeto siempre esté dispuesto correctamente, y no requiere un código explícito para garantizar que esto suceda.