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
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());
}
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