[dev] SharePoint Services Objekte über Code entsorgen

Ein Technical Article im msdn weist auf die besondere Behandlung bestimmter Objekte (z.B. SPWeb, SPSite) des SharePoint Services Objektmodells hin. Diese Objekte führen unmanaged Code aus und können so große Teile des Speichers belegen ohne durch den Garbage Collector automatisiert wieder daraus entfernt bzw. freigegeben werden.

Eine exzessive Nutzung dieser Objekte z.B. in WebParts ohne sie explizit wieder zu verwerfen kann zur Folge haben, dass das ausführende System eine schlechtere Performance aufweist oder die Anwendung gar ganz abstürzt. Die betroffenen Objekte implementieren die IDisposable Schnittstelle, welche eine dispose() Methode zur Verfügung stellt.

D.h. Entwickler sollten folgende Maßnahmen im Umgang mit diesen Objekten treffen:

- Verwendung der using-Klausel:

String str;

using(SPSite oSPsite = new SPSite("http://server"))
{
 using(SPWeb oSPWeb = oSPSite.OpenWeb())
 {
  str = oSPWeb.Title;
  str = oSPWeb.Url;
 }
}

- Explizites Aufrufen der dispose-Methode, wenn das Objekt nicht mehr benötigt wird:

SPSite oSPSite = new SPSite("http://server");

//weitere Verwendung des SPSite Objekts im Code ...

oSPSite.Dispose();

Einen Kommentar schreiben