SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Umgang mit SharePoint Objekten

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
37 Beiträge
Chris 22 erstellt 15 Sept. 2010 13:37
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

 Hi,

ich bin ein absoluter SharePoint Anfänger und daher nicht sehr versiert im Umgang mit SharePoint -Objekten.

Mein Problem:

Mehrere Klassen arbeiten auf der gleichen Page und verwenden somit das ''gleiche'' SPWeb Objekt. Ich versuche im Moment SPWeb nur einmal zu erzeugen und an entsprechende Klassen weiterzugeben. Scheint aber nicht richtig zu funktionieren, d.h. ich befinde mich nicht immer auf den richtigen Objekten.

Nun zu meiner Frage:
Muss ich in jeder Klasse ein neues SPWeb Objekt erzeugen bzw. welches ist der richtige Lösungsweg?

Danke im Voraus!

VG

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Sept. 2010 14:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Chris 22"]Muss ich in jeder Klasse ein neues SPWeb Objekt erzeugen bzw. welches ist der richtige Lösungsweg?[/quote]

Das läßt sich (wie so oft) nicht pauschal beantworten. In jedem Fall solltest Du mit SPSite und SPWeb-Instanzen möglichst sparsam umgehen (weil sie sehr viel Systemressourcen verbrauchen) und nach Gebrauch Dispose() aufrufen (oder besser gleich mit using arbeiten). Du solltest also möglichst wenig Instanzen erzeugen und diese ggf. an andere Methoden durchreichen.

Wenn Du unabhängig von der SharePoint Browseroberfläche arbeitest, dann mußt Du die Instanzen selbst erzeugen - und ordentlich aufräumen. Wenn Du innerhalb der Oberfläche arbeitest (z.B. in einem Webpart), dann benutze am Besten SPConext.Current.Site bzw. SPContext.Current.Web. Diese darfst Du nicht Dispose()-en.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
37 Beiträge
Chris 22 Als Antwort am 15 Sept. 2010 15:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

 Hallo Andi,

 

erstmal danke für die schnelle Antwort.

Die Verwendung von Using(...) ist mir klar und nach längerer Fehlersuche habe ich auch festgestellt, dass bei SPContext() kein Dispose() verwendet werden darf. :)

Ich habe ca. 5 Klassen, welche mit dem GLEICHEN SPWeb-Objekt arbeiten. Ich dachte zuerst, dass es so gemacht werden muss. Aber eigentlich ist es doch egal oder? Man modifiziert ja ein zentrales Objekt (die Page) und alle weiteren Zugriffe beziehen sich auf den aktuellen Zustand der Page.

Was ich leider garnicht einschätzen kann ist wie es sich verhält, wenn viele User und somit viele Instanzen einer Klasse existieren... .

VG
Chris

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Sept. 2010 15:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe leider nicht verstanden, was Du eigentlich sagen oder wissen möchtest. Kannst Du das bitte nochmal klarer ausdrücken?

[quote user="Chris 22"]Was ich leider garnicht einschätzen kann ist wie es sich verhält, wenn viele User und somit viele Instanzen einer Klasse existieren[/quote]

Das muß derjenige wissen, der die Klassen entwickelt hat. Wenn eine Klasse z.B. viel Speicher belegt und es gibt viele Instanzen dieser Klasse, dann wird eben auch sehr viel Speicher belegt. Das gilt z.B. für SPSite und SPWeb und genau deshalb solltest Du die sparsam verwenden oder die Instanzen von SPContext verwenden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 15 Sept. 2010 15:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wenn du aber auf Instanzen von SPSite oder SPWeb aus dem SPContext zugreifst, dann sind das doch immer nur Referenzen. Ob du nun also SPContext.Current.SPWeb einmal oder mehrfach aufrufst sollte keinen erheblichen Unterschied machen, da alle Aufrufe immer auf die gleiche Instanz verweisen.

Henning Eiben
busitec.de

Ohne Rang
37 Beiträge
Chris 22 Als Antwort am 15 Sept. 2010 15:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

 Ich wollte eigentlich auf etwas anderes hinaus, also nicht auf die Speicherbelegung, aber trotzdem danke für den Hinweis. Es ging mir um die Bindung der Objekte zu den Usern, also konkret darum einem User nicht das falsche Objekt zur Verfügung zu stellen. Wie gesagt, ich habe keine Erfahrung mit SharePoint und wollte mir durch die Frage mögliche falsche Vorgehensweisen ersparen.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Sept. 2010 16:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das hängt auch wieder vom Kontext ab. Wenn Du nichts besonderes unternimmst, dann bekommst Du immer eine Objektinstanz passend zum User, der den Code ausführt. D.h. Du mußt Dich meist nicht darum kümmern.

Viele Grüße
Andi
af @ evocom de
Blog