Gestion du Dispose : Best Practices sous SharePoint, la suite
En parcourant un peu mes archives de favoris je suis retombé sur un vieux post qui reste toujours d'actualité.
Il y a quelque temps, j'avais posté sur le problème de "Memory Pressuse" :
Gestion du Dispose : Attention au Memory Pressure sous SharePoint (et donc comment faire mieux)
Bien sur, ce post et ses annexes mettaient en valeurs les Best Practices décrites ici :
Best Practices: Using Disposable Windows SharePoint Services Objects
Cependant, si il est important de bien gérer sa mémoire, il est tout autant de bien utiliser son code objet comme le rappel cet article
Best Practices: Common Coding Issues When Using the SharePoint Object Model
Voici quelques exemples que je trouve important
Genre :
- La libération des sous objets SPWeb
public void GetNavigationInfo()
{
SPWeb oSPWeb = SPContext.Web;
foreach(SPWeb oSubWeb in oSPWeb.GetSubWebsForCurrentUser()))
{
// .. Add subweb information for navigation ..
oSubWeb.Dispose();
}
}
>>> Sans le Dispose, bien les conséquences en mémoires sont réelles :
| Users |
Best Case |
Worst Case |
| 10 |
100 MB |
200 MB |
| 50 |
500 MB |
1000 MB |
| 100 |
1000 MB |
2000 MB |
| 250 |
2500 MB |
5000 MB |
Convaincu ?
>>> se repère des que :
- l'application pool recycle fréquemment !!!
- des performances pauvres sous forte charge
- des Time Outs
- de nouvelles WP non certifiés arrivent sur votre portail
- Gestion du cache dans une WebPart
>>> Attention au principe de lock avant consultation du cache et ou les objets threads safe (merci le Datatable)
public void CacheData()
{
DataTable oDataTable;
SPListItemCollection oListItems;
lock(this)
{
oDataTable = (DataTable)Cache["ListItemCacheName"];
if(oDataTable == null)
{
oListItems = DoQueryToReturnItems();
oDataTable = oListItems.GetDataTable();
Cache.Add("ListItemCacheName", oDataTable, ..);
}
}
}
>>> n'oubliez pas non plus notre ami l'ObjectDatasource
...
...
...
Bref, bonne lecture à tous ! (une de plus, je sais mais je suis pour favoriser la lecture chez les développeurs donc ... )
Renaud Comte aka TheMit (SPJetLaggeur)
Member of WygTeam
http://www.wygwam.com
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :