sharepoint api nightmares

18
SharePoint API Nightmares Gebruik Dispose() anders wordt SharePoint boos! Donald Hessing

Upload: sparked

Post on 15-Jan-2015

1.740 views

Category:

Technology


1 download

DESCRIPTION

This presentation was given by Donald Hessing of VX company as part of the Sparked Toolkit Session: SharePoint Nightmares.

TRANSCRIPT

Page 1: SharePoint API Nightmares

SharePoint API NightmaresGebruik Dispose() anders wordt SharePoint boos!

Donald Hessing

Page 2: SharePoint API Nightmares

Wie ben ik? Donald Hessing, VX Company Microsoft Certified

– (MCAD, WSS & MOSS) SharePoint Architect, Spreker en Auteur

– SharePoint 2007 (WSS & MOSS)– Service Oriented Architecture (SOA)– Silverlight 2 / 3

Page 3: SharePoint API Nightmares

SharePoint Object Model Krachtig voor het maken van custom solutions De classes zijn wrappers van unmanaged code

– SPSite, SPWeb, SPList, etc Goed gebruik van SharePoint object model is niet

eenvoudig

Niet Disposen van SPWeb en SPSite resulteert in:– Out of Memory Exceptions (OOME)– Slechte performance / veel resources– Onterecht Disposen Slechte performance

Page 4: SharePoint API Nightmares

Voorbeeld

Page 5: SharePoint API Nightmares

using (SPWeb rootWeb = SPContext.Current.Site.RootWeb) { foreach (SPWeb innerWeb in rootWeb.Webs) { foreach (SPList list in innerWeb.Lists) { if (list.Items.Count > 0) {

ProcessLatesItem(list.Items[list.Items.Count - 1]); } } } } // automatically called

Page 6: SharePoint API Nightmares

Potentially excessive number of SPRequest objects (number of objects) currently

unreleased on thread number of thread.

Gebruik: SPDisposeCheck.exe

Page 7: SharePoint API Nightmares

Dispose - Algemeen Gebruik Dispose op alle SPSite en SPWeb objecten

die je zelf creëert Dispose geen SPSite en SPWeb objecten van

SPContext en SPControl– SPContext.Current.Site– SPContext.Current.Site.RootWeb– SPControl.GetContextWeb(httpContext)– SPControl.GetContextSite(httpContext)

Dispose SPWeb object van SPSite.AllWeb.Add Dispose SPWeb object van SPSite.AllWebs[0] Pas op met recursieve functies

Page 8: SharePoint API Nightmares

web.Lists[“Pages”] != web.Lists[“Pages”]web.Lists[“Pages”] == web.Lists[“Pages”]

1 Anti-Pattern

Page 9: SharePoint API Nightmares

Anti-Pattern SPList[]

1: web.Lists[“Events”].EnableAttachments = false;2: Web.Lists[“Events”].Update();

SPList object in regel 1 is niet dezelfde als het SPList object van de tweede regel!

1: SPList list= web.Lists[“Events”]; 2: list.EnableAttachments = false; 3: list.Update();

1

Page 10: SharePoint API Nightmares

Anti-Pattern SPList.Items

Tonen van items uit een lijst

SPList activeList = SPContext.Current.List;for(int i=0;i<100 && i<activeList.Items.Count;i++) {

SPListItem listItem = activeList.Items[i];ShowTitle(listItem["Title"].ToString());

}

2

Page 11: SharePoint API Nightmares

Improved-Pattern

SPListItemCollection items = SPContext.Current.List.Items;

for(int i=0;i<100 && i<items.Count;i++) {

SPListItem listItem = items[i];ShowTitle(listItem["Title"].ToString());

}

2

Page 12: SharePoint API Nightmares

Best-Pattern

SPQuery query = new SPQuery();query.RowLimit = 100;SPListItemCollection items =

SPContext.Current.List.GetItems(query);for (int i=0;i<items.Count;i++) {

SPListItem listItem = items[i]; ShowTitle(listItem["Title"].ToString());}

2

Page 13: SharePoint API Nightmares

Anti-Pattern SPList.Items Elke aanroep van .Items haalt alle items op uit de

database. Niet nodig indien:– SPList.Items[0], SPList.Items.Count– SPList.Items kan geen gebruik maken van indexen

SPList.Items kan een lock leggen op de database Indien nodig, bewaar SPList.Items in een variabele

Gebruik SPQuery voor data in een List Gebruik SPSiteDataQuery over List objecten heen

– Gebruik de RowLimit property van het Query object

2

Page 14: SharePoint API Nightmares

Performance32

Page 15: SharePoint API Nightmares

Anti-Pattern SPList.Items[].Delete

Verwijderen van Items in een “Large List” is kostbaar– 1) Extra kostbaar wanneer de site onder load is– 2) Markeer listitems als “verwijdert” – 3) Maak een job die de items verwijdert buiten piektijden

MOSS Publishing Item Schedueling is OOTB Alternatief is het asynchroon verwijderen van items

3

Page 16: SharePoint API Nightmares

SharePoint API ASP.NET ontwikkelaars zonder SharePoint kennis Veel functionaliteit kan bereikt worden dmv OOTB

functionaliteit. – ContentQueryWebPart– Search– Navigation

Gebruik een generieke Data Access Layer voor het ophalen van SharePoint content items

Page 17: SharePoint API Nightmares

Links Best Practices using Disposable objects in SharePointhttp://msdn.microsoft.com/en-us/library/aa973248.aspx SharePoint Dispose Patternshttp://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx#SPDisposeCheckID_220Understanding SPRequesthttp://hristopavlov.wordpress.com/2009/01/19/understanding-sharepoint-sprequest/ SPDisposeChecker toolhttp://code.msdn.microsoft.com/SPDisposeCheck White paper: Working with large lists in SharePointhttp://technet.microsoft.com/en-us/library/cc262813.aspx

Page 18: SharePoint API Nightmares

Vragen?

Voor vragen:Donald Hessing [email protected]