Вопрос

Необходимо ли утилизировать сайт и веб -объекты в следующем коде? Если так, как мне это сделать?

 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
Это было полезно?

Решение

Джеймс и Тони абсолютно правы, но пропустили очевидный IMHO - ваш код имеет более глубокий недостаток, и если вы исправите это, то утилизация объектов не требуется.

Вы должны (где это возможно) использовать объекты SPWEB и SPSITE из SPCONTEXT - они уже созданы для вас инфраструктурой веб -части SharePoint и более эффективными для их использования, чем создавать свои собственные.

В своем коде вы уже используете один из них, чтобы получить текущий URL -адрес Webs, но затем создаете свой собственный сайт и веб -сайт, независимо от - довольно неэффективно и не необходимо.

Так что вместо

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

Вы должны использовать просто

Dim web As SPWeb = SPContext.Current.Web

Если вы используете SPSite/Spweb из Spcontext, а не создаете свой собственный, то вы не должны избавиться от них (вы не создали их, поэтому оставьте их в покое)

Видеть MSDN - Лучшие практики: использование одноразовых объектов SharePoint Services

Объекты SPCONTEXT управляются фреймворком SharePoint и не должны быть явно утилизированы в вашем коде. Это верно также для объектов SPSITE и SPWEB, возвращаемых spcontext.site, spcontext.current.site, spcontext.web и spcontext.current.web.

Другие советы

Да, вам нужно будет утилизировать Spwebs, созданные через spsite.openweb ().

Чтобы утилизировать это, простой Call web.dispose (), когда вы закончите в методе.

Вы также можете использовать оператор использования с тем же эффектом, не нуждаясь в непосредственном вызове Dispose ()

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 Джеймс

Вы также должны попытаться использовать SharePoint Dispose Checker Tool В ваших проектах по анализу вашего кода для потенциальных утечек памяти и применения лучших практик.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top