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?)

¿Fue útil?

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 por SPSiteCollection.Add, por el SPSiteCollection[] operador de índice, o cedido en un SPSiteCollection foreach círculo
  • Ningún Spweb objeto devuelto de SPSite.AllWebs.Add, SPWebCollection.Add, la SPSite.AllWebs[] operador de índice o cedido en un SPSite.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.

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