Frage

Was ist die beste Praxis mit der Verwendung der Verwendung bei der Arbeit mit SharePoint -Objekten. Wann und wie sollten Sie die verwendete Anweisung verwenden, so dass die verwendeten Objekte usw. entsorgt werden?

War es hilfreich?

Lösung

Der Schlüssel ist, wenn Ihr Code eine Instanz eines Sp -Orts oder eines SpWEB erstellt, müssen Sie ihn entsorgen. Wenn Sie jedoch eine Instanz von spcontext.current verwenden, sollten Sie es nicht entsorgen. dh die Entsorgung dessen, was Sie erstellen, ob direkt oder indirekt.

Beispiel für das Erstellen einer eigenen Instanz, daher ist die Verwendung erforderlich:

using(SPSite site = new SPSite("http://server"))
{
}

Beispiel für die Verwendung eines vorhandenen Objekts aus dem SPContext, daher ist nicht erforderlich:

SPWeb web = SPContext.Current.Web;
SPSite site = SPContext.Current.Site;

Beispiel für das Erstellen einer eigenen Instanz eines SPWEB, indem Sie OpenWeb () anrufen:

using(SPWeb web = SPContext.Current.Site.OpenWeb("http://server/mywebsite"))
{
}

Achten Sie auch darauf, Objekte zu entsorgen, auch wenn eine Ausnahme ausgelöst wird, indem Sie den Aufruf in den endgültigen Block setzen.

try
{
   site = new SPSite("http://server");
   web = site.OpenWeb();
}
catch(Exception e)
{
   //handle it
}
finally
{
   if (web != null)
      web.Dispose();

   if (site != null)
      site.Dispose();
}

Dies sind nur einige Beispiele, aber es gibt viele andere. Hier ist ein gute Referenz.

Außerdem können Sie die nutzen Spdisposecheck Werkzeug.

Andere Tipps

Microsoft gibt es einen Leitfaden für Best Practices darüber, wann die Objekte (Sp -Site, SPWeb) entsorgen werden sollen:http://msdn.microsoft.com/en-us/library/ee557362(v=office.14).aspx

Außerdem gibt es ein von Microsoft zur Verfügung gestellter Prüfer -Tool:http://archive.msdn.microsoft.com/spdisposecheck

Die goldene Regel scheint zu sein: Wenn Sie das Objekt besitzen (dh es erstellt mit der Verwendung des new Bediener), dann entsorgen Sie es. Wenn das Objekt von einem anderen Objekt stammt, das vom SharePoint -Objektmodell selbst erstellt wurde, dann nicht. Verwenden Sie SPDisposecheck, um sicherzugehen, wie Laurie angegeben ist.

Während die obige Antwort in Ordnung ist, möchte ich nur ein paar Sachen für Klarheit hinzufügen.

Um festzustellen, ob das von Ihnen verwendete Objekt entsorgt werden muss, können Sie die MSDN -Referenz der Klasse überprüfen (drücken Sie F1, wenn sich der Cursor in der Deklaration in VS befindet) und prüfen, ob die Klasse identifiziert werden kann. Wenn ja, entsorgen Sie das Objekt nur, wenn Sie das Objekt tatsächlich erstellt haben (entweder mit einer neuen Anweisung oder einer OpenXXX () -Methode oder ähnlichem).

Für diese Objekte wird für diese Objekte nie erforderlich, wenn Sie die Verwendungsanweisung verwenden, da in der Zusammenstellung die Verwendung der Verwendung in einer Try-Catch-final-Konstruktion, wie es in Lauries endgültigem Beispiel zu sehen ist, zu sehen ist. Die Verwendungsanweisung ist vorzuziehen, da sie viel eleganter ist und Ihren Code lesbarer macht.

Das SPDisposecheck scheint ein schönes Werkzeug zu sein, aber mit ein wenig gesunden Menschenverstand werden Sie es wahrscheinlich nicht brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top