Your SlideShare is downloading. ×
  • Like
SharePoint API Nightmares
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

SharePoint API Nightmares

  • 1,722 views
Published

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

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

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Bedankt voor de performance tips, ik ga ze gelijk uitproberen!
    Are you sure you want to
    Your message goes here
    Be the first to like this
No Downloads

Views

Total Views
1,722
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
30
Comments
1
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. SharePoint API Nightmares Gebruik Dispose() anders wordt SharePoint boos! Donald Hessing
  • 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. 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. Voorbeeld
  • 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. Potentially excessive number of SPRequest objects (number of objects) currently unreleased on thread number of thread. Gebruik: SPDisposeCheck.exe
  • 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. 1 Anti-Pattern web.Lists*“Pages”+ != web.Lists*“Pages”+ web.Lists*“Pages”+ == web.Lists*“Pages”+
  • 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. 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. 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. 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. 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. Performance 2 3
  • 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. 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. 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. Vragen? Voor vragen: Donald Hessing dhessing@vxcompany.com