Pregunta

¿Es necesario deshacerse del sitio y los objetos web en el siguiente código? Si es así, ¿cómo hago esto?

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim site As New SPSite(SPContext.Current.Web.Url)
    Dim web As SPWeb = site.OpenWeb()
    web.AllowUnsafeUpdates = True
    Dim lPmr As SPList = web.Lists("NombreList")
    Dim oQuery As New SPQuery()
    Dim itemCollectionPMR As SPListItemCollection

    oQuery = New SPQuery()
    oQuery.Query = ""
    itemCollectionPMR = lPmr.GetItems(oQuery)

 ........        

 End Sub
¿Fue útil?

Solución

James y Toni son absolutamente correctos, pero se han perdido el en mi humilde opinión: su código tiene un defecto más profundo y si arreglas esto, no es necesario eliminar los objetos.

Debería (cuando sea posible) usar los objetos SPWEB y SPSITE de SPContext: ya los crean para usted la infraestructura de la parte web de SharePoint y es más eficiente usarlos que crear el suyo.

En su código, ya está utilizando uno de ellos para obtener la URL de las redes actuales, pero luego creando su propio sitio y web independientemente, bastante ineficiente y no es necesario.

Entonces en lugar de

Dim site As New SPSite(SPContext.Current.Web.Url)
Dim web As SPWeb = site.OpenWeb()

Deberías estar usando solo

Dim web As SPWeb = SPContext.Current.Web

Si usa SPSITE/SPWEB de SpContext estos en lugar de crear el suyo propio, entonces no debe deshacerse de ellos (no los creó, así que déjalos solo)

Ver MSDN - Mejores prácticas: Uso de objetos desechables de Windows SharePoint Services

Los objetos SPContext son administrados por el marco de SharePoint y no deben estar explícitamente dispuestos en su código. Esto también es cierto para los objetos SPSITE y SPWEB devueltos por SpContext.Site, SpContext.Current.Site, SpContext.Web y SpContext.Current.Web.

Otros consejos

Sí, deberá deshacerse de los spwebs creados a través de spsite.openweb ().

Para deshacerse de él, Call Simple Web.Dispose () cuando haya terminado en el método.

También puede usar la declaración de uso del mismo efecto, sin necesidad de llamar directamente a la eliminación ()

Using site As New SPSite(SPContext.Current.Web.Url)
  Using web As SPWeb = site.OpenWeb()
    web.AllowUnsafeUpdates = True
    Dim lPmr As SPList = web.Lists("NombreList")
    Dim oQuery As New SPQuery()
    Dim itemCollectionPMR As SPListItemCollection

    oQuery = New SPQuery()
    oQuery.Query = ""
    itemCollectionPMR = lPmr.GetItems(oQuery)
  End Using
End Using

+1 James

También deberías intentar usar Herramienta de verificador de disposición de SharePoint en sus proyectos para analizar su código para obtener posibles fugas de memoria y aplicar las mejores prácticas.

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