Sollte ich diese Splines- und SPWEB -Objekte entsorgen?
Frage
Ist es notwendig, die Site- und Webobjekte im folgenden Code zu entsorgen? Wenn ja, wie mache ich das?
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
Lösung
James und Toni sind absolut korrekt, haben aber das offensichtliche IMHO übersehen - Ihr Code hat einen tieferen Fehler, und wenn Sie dies behoben haben, ist es nicht erforderlich, die Objekte zu entsorgen.
Sie sollten (wo möglich) die SPWEB- und Sp -Site -Objekte von spcontext verwenden - sie werden bereits von der SharePoint -Web -Teil -Infrastruktur für Sie erstellt, und es ist effizienter, diese zu verwenden, als Ihre eigenen zu erstellen.
In Ihrem Code verwenden Sie bereits einen von ihnen, um die aktuelle Web -URL zu erhalten, aber dann Ihre eigene Website und Ihr Web zu erstellen - ziemlich ineffizient und nicht erforderlich.
Also statt
Dim site As New SPSite(SPContext.Current.Web.Url)
Dim web As SPWeb = site.OpenWeb()
Sie sollten gerade verwenden
Dim web As SPWeb = SPContext.Current.Web
Wenn Sie Sp -Site/SPWEB von spcontext verwenden, anstatt Ihre eigenen zu erstellen, sollten Sie sie nicht entsorgen (Sie haben sie nicht erstellt, lassen Sie sie also in Ruhe)
Sehen MSDN - Best Practices: Verwendung von verfügbaren Windows SharePoint Services -Objekten
SPCONTEXT -Objekte werden vom SharePoint -Framework verwaltet und sollten nicht ausdrücklich in Ihrem Code entsorgt werden. Dies gilt auch für die von spcontext.sit, spcontext.current.sites, spcontext.web und spcontext.current.web zurückgegebenen Sp -und spcontext.current.web.
Andere Tipps
Ja, Sie müssen SPWEBs entsorgen, die über sp -site.openweb () erstellt wurden.
Um es zu entsorgen, Call Web.Dison (), wenn Sie in der Methode fertig sind.
Sie können auch die Verwendung der Verwendung von Anweisung zum gleichen Effekt verwenden, ohne direkt aufzuteilen () aufzurufen ()
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
Sie sollten auch versuchen zu verwenden SharePoint entsorgen das Checker -Tool In Ihren Projekten analysieren Sie Ihren Code auf potenzielle Speicherlecks und die Anwendung von Best Practices.