SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
SharePoint API Nightmares
Gebruik Dispose() anders wordt SharePoint boos!




                  Donald Hessing
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
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
Voorbeeld
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
Potentially excessive number of SPRequest
    objects (number of objects) currently
  unreleased on thread number of thread.

       Gebruik: SPDisposeCheck.exe
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
1    Anti-Pattern


web.Lists*“Pages”+ != web.Lists*“Pages”+
web.Lists*“Pages”+ == web.Lists*“Pages”+
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();
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());
}
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());
}
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());
}
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
Performance
2
3
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
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
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
Vragen?

Voor vragen:
Donald Hessing   dhessing@vxcompany.com

Weitere ähnliche Inhalte

Ähnlich wie SharePoint API Nightmares

Object Oriented Programming for web applications
Object Oriented Programming for web applicationsObject Oriented Programming for web applications
Object Oriented Programming for web applicationsEdwin Vlieg
 
Cursus Zend Framework - 1
Cursus Zend Framework - 1Cursus Zend Framework - 1
Cursus Zend Framework - 1bartjeukendrup
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknetHans Rossel
 
20130308 GB les 6
20130308 GB les 620130308 GB les 6
20130308 GB les 6mleeuwen
 
Intro schema.org / microdata voor frontend developers
Intro schema.org / microdata voor frontend developersIntro schema.org / microdata voor frontend developers
Intro schema.org / microdata voor frontend developersPieter Mergan
 
OpenESB -- Hello World Intor
OpenESB -- Hello World IntorOpenESB -- Hello World Intor
OpenESB -- Hello World Intorpappavis
 
Versiebeheer van database changes
Versiebeheer van database changesVersiebeheer van database changes
Versiebeheer van database changesArjen van Vliet
 
Sql developer 4 workshop
Sql developer 4 workshopSql developer 4 workshop
Sql developer 4 workshopmakker_nl
 
Front-end Performance in Drupal
Front-end Performance in DrupalFront-end Performance in Drupal
Front-end Performance in DrupalLimoenGroen
 

Ähnlich wie SharePoint API Nightmares (14)

Object Oriented Programming for web applications
Object Oriented Programming for web applicationsObject Oriented Programming for web applications
Object Oriented Programming for web applications
 
Cursus Zend Framework - 1
Cursus Zend Framework - 1Cursus Zend Framework - 1
Cursus Zend Framework - 1
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknet
 
20130308 GB les 6
20130308 GB les 620130308 GB les 6
20130308 GB les 6
 
Web Security 101
Web Security 101Web Security 101
Web Security 101
 
Intro schema.org / microdata voor frontend developers
Intro schema.org / microdata voor frontend developersIntro schema.org / microdata voor frontend developers
Intro schema.org / microdata voor frontend developers
 
OpenESB -- Hello World Intor
OpenESB -- Hello World IntorOpenESB -- Hello World Intor
OpenESB -- Hello World Intor
 
Versiebeheer van database changes
Versiebeheer van database changesVersiebeheer van database changes
Versiebeheer van database changes
 
XPages Advanced
XPages AdvancedXPages Advanced
XPages Advanced
 
Refresher HTML(5) and CSS(3) - CC FE & UX
Refresher HTML(5) and CSS(3) - CC FE & UXRefresher HTML(5) and CSS(3) - CC FE & UX
Refresher HTML(5) and CSS(3) - CC FE & UX
 
Sql developer 4 workshop
Sql developer 4 workshopSql developer 4 workshop
Sql developer 4 workshop
 
Cooking Cake
Cooking CakeCooking Cake
Cooking Cake
 
embedded SQL en JDBC
embedded SQL en JDBCembedded SQL en JDBC
embedded SQL en JDBC
 
Front-end Performance in Drupal
Front-end Performance in DrupalFront-end Performance in Drupal
Front-end Performance in Drupal
 

Mehr von Sparked

SharePoint Highlights: Search-driven portals, door Waldek Mastykarz
SharePoint Highlights: Search-driven portals, door Waldek MastykarzSharePoint Highlights: Search-driven portals, door Waldek Mastykarz
SharePoint Highlights: Search-driven portals, door Waldek MastykarzSparked
 
SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...
SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...
SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...Sparked
 
SharePoint Highlights: SharePoint Mixology, door Johan Kroese
SharePoint Highlights: SharePoint Mixology, door Johan KroeseSharePoint Highlights: SharePoint Mixology, door Johan Kroese
SharePoint Highlights: SharePoint Mixology, door Johan KroeseSparked
 
SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...
SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...
SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...Sparked
 
SharePoint Highlights: Architectural Changes, door Donald Hessing
SharePoint Highlights: Architectural Changes, door Donald HessingSharePoint Highlights: Architectural Changes, door Donald Hessing
SharePoint Highlights: Architectural Changes, door Donald HessingSparked
 
SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...
SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...
SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...Sparked
 
SharePoint en Windows 8 apps
SharePoint en Windows 8 appsSharePoint en Windows 8 apps
SharePoint en Windows 8 appsSparked
 
SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk
SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk
SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk Sparked
 
De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...
De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...
De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...Sparked
 
App challenge sparked
App challenge sparkedApp challenge sparked
App challenge sparkedSparked
 
App challenge sparked
App challenge sparkedApp challenge sparked
App challenge sparkedSparked
 
App challenge sparked
App challenge sparkedApp challenge sparked
App challenge sparkedSparked
 
Windows 8 Apps for Public Prosecutors
Windows 8 Apps for Public ProsecutorsWindows 8 Apps for Public Prosecutors
Windows 8 Apps for Public ProsecutorsSparked
 
SharePoint Enterprise Search - SharePoint Truths
SharePoint Enterprise Search - SharePoint TruthsSharePoint Enterprise Search - SharePoint Truths
SharePoint Enterprise Search - SharePoint TruthsSparked
 
Multigeneration workplace
Multigeneration workplaceMultigeneration workplace
Multigeneration workplaceSparked
 
Trends zakelijkedienstverlening
Trends zakelijkedienstverleningTrends zakelijkedienstverlening
Trends zakelijkedienstverleningSparked
 
What is MoblinQ?
What is MoblinQ?What is MoblinQ?
What is MoblinQ?Sparked
 
Appstore voor het onderwijs
Appstore voor het onderwijsAppstore voor het onderwijs
Appstore voor het onderwijsSparked
 
Cloud Strategy - Cloud Accelerate Workshop
Cloud Strategy - Cloud Accelerate WorkshopCloud Strategy - Cloud Accelerate Workshop
Cloud Strategy - Cloud Accelerate WorkshopSparked
 
SharePoint 2010 DMS Round Table
SharePoint 2010 DMS Round TableSharePoint 2010 DMS Round Table
SharePoint 2010 DMS Round TableSparked
 

Mehr von Sparked (20)

SharePoint Highlights: Search-driven portals, door Waldek Mastykarz
SharePoint Highlights: Search-driven portals, door Waldek MastykarzSharePoint Highlights: Search-driven portals, door Waldek Mastykarz
SharePoint Highlights: Search-driven portals, door Waldek Mastykarz
 
SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...
SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...
SharePoint Highlights: SharePoint Site Provisioning On-premises and in the Cl...
 
SharePoint Highlights: SharePoint Mixology, door Johan Kroese
SharePoint Highlights: SharePoint Mixology, door Johan KroeseSharePoint Highlights: SharePoint Mixology, door Johan Kroese
SharePoint Highlights: SharePoint Mixology, door Johan Kroese
 
SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...
SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...
SharePoint Highlights: Digitaal Forensisch Onderzoek met SharePoint, door Han...
 
SharePoint Highlights: Architectural Changes, door Donald Hessing
SharePoint Highlights: Architectural Changes, door Donald HessingSharePoint Highlights: Architectural Changes, door Donald Hessing
SharePoint Highlights: Architectural Changes, door Donald Hessing
 
SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...
SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...
SharePoint Highlights: Yammer, putting Enterprise Social to work, door Robert...
 
SharePoint en Windows 8 apps
SharePoint en Windows 8 appsSharePoint en Windows 8 apps
SharePoint en Windows 8 apps
 
SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk
SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk
SharePoint Extranet, doing authentication the hard way – Stef van Hooijdonk
 
De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...
De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...
De transitie van File Shares naar Document Libraries bij Robec – Jasper Ooste...
 
App challenge sparked
App challenge sparkedApp challenge sparked
App challenge sparked
 
App challenge sparked
App challenge sparkedApp challenge sparked
App challenge sparked
 
App challenge sparked
App challenge sparkedApp challenge sparked
App challenge sparked
 
Windows 8 Apps for Public Prosecutors
Windows 8 Apps for Public ProsecutorsWindows 8 Apps for Public Prosecutors
Windows 8 Apps for Public Prosecutors
 
SharePoint Enterprise Search - SharePoint Truths
SharePoint Enterprise Search - SharePoint TruthsSharePoint Enterprise Search - SharePoint Truths
SharePoint Enterprise Search - SharePoint Truths
 
Multigeneration workplace
Multigeneration workplaceMultigeneration workplace
Multigeneration workplace
 
Trends zakelijkedienstverlening
Trends zakelijkedienstverleningTrends zakelijkedienstverlening
Trends zakelijkedienstverlening
 
What is MoblinQ?
What is MoblinQ?What is MoblinQ?
What is MoblinQ?
 
Appstore voor het onderwijs
Appstore voor het onderwijsAppstore voor het onderwijs
Appstore voor het onderwijs
 
Cloud Strategy - Cloud Accelerate Workshop
Cloud Strategy - Cloud Accelerate WorkshopCloud Strategy - Cloud Accelerate Workshop
Cloud Strategy - Cloud Accelerate Workshop
 
SharePoint 2010 DMS Round Table
SharePoint 2010 DMS Round TableSharePoint 2010 DMS Round Table
SharePoint 2010 DMS Round Table
 

SharePoint API Nightmares

  • 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
  • 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
  • 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