Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SharePoint API Nightmares

1,921 views

Published on

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

Published in: Technology
  • Bedankt voor de performance tips, ik ga ze gelijk uitproberen!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

SharePoint API Nightmares

  1. 1. SharePoint API Nightmares Gebruik Dispose() anders wordt SharePoint boos! Donald Hessing
  2. 2. 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
  3. 3. 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
  4. 4. Voorbeeld
  5. 5. 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
  6. 6. Potentially excessive number of SPRequest objects (number of objects) currently unreleased on thread number of thread. Gebruik: SPDisposeCheck.exe
  7. 7. 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
  8. 8. 1 Anti-Pattern web.Lists*“Pages”+ != web.Lists*“Pages”+ web.Lists*“Pages”+ == web.Lists*“Pages”+
  9. 9. Anti-Pattern SPList[] 1 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();
  10. 10. Anti-Pattern SPList.Items 2 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[quot;Titlequot;].ToString()); }
  11. 11. Improved-Pattern 2 SPListItemCollection items = SPContext.Current.List.Items; for(int i=0;i<100 && i<items.Count;i++) { SPListItem listItem = items[i]; ShowTitle(listItem[quot;Titlequot;].ToString()); }
  12. 12. Best-Pattern 2 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[quot;Titlequot;].ToString()); }
  13. 13. Anti-Pattern SPList.Items 2  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
  14. 14. Performance 2 3
  15. 15. Anti-Pattern 3 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
  16. 16. 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
  17. 17. Links  Best Practices using Disposable objects in SharePoint http://msdn.microsoft.com/en-us/library/aa973248.aspx  SharePoint Dispose Patterns http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007- and-wss-3-0-dispose-patterns-by- example.aspx#SPDisposeCheckID_220 Understanding SPRequest http://hristopavlov.wordpress.com/2009/01/19/understanding- sharepoint-sprequest/  SPDisposeChecker tool http://code.msdn.microsoft.com/SPDisposeCheck  White paper: Working with large lists in SharePoint http://technet.microsoft.com/en-us/library/cc262813.aspx
  18. 18. Vragen? Voor vragen: Donald Hessing dhessing@vxcompany.com

×