Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

The Mit's Blog

En plus d'intégrer et skier, il sait même écrire !
(Blog de Renaud Comte)

Actualités

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 :

  1. l'application pool recycle fréquemment !!!
  2. des performances pauvres sous forte charge
  3. des Time Outs
  4. 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 :
Posted: mardi 11 mars 2008 11:34 par themit

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Open XML] Travailler avec Open XML : les Office System Power Tools pour Visual Studio par Julien Chable le il y a 29 minutes

- SharePoint : Nouvel article sur la modification du lien de recherche de Team Sites MOSS par Blog Technique de Romelard Fabrice le il y a 44 minutes

- Power Tools 2008 CTP Juillet par Noham Choulant le il y a 2 heures et 18 minutes

- Disparition de variables de session PHP après une redirection ? par MadMatt le il y a 12 heures et 15 minutes

- [MOSS 2007] Publier ses formulaires InfoPath via feature par Adrien Siffermann le il y a 15 heures et 22 minutes

- Imagine Cup 2008 - Paris - Les résultats par TheSaib .NET blog le il y a 16 heures et 44 minutes

- L'Egypte accueille Imagine Cup 2009 par Code is poetry le il y a 16 heures et 56 minutes

- PowerShell : Mise en ligne de fonctions intéressantes pour SharePoint par Blog Technique de Romelard Fabrice le il y a 18 heures et 3 minutes

- Raccourcis clavier et CRM 4 par Clark, C#, MSCRM, SBS le il y a 22 heures et 9 minutes

- [Silverlight] Comment échanger des données entre une application Silverlight et une page ASP.NET via cookies ? par Thomas Lebrun le il y a 22 heures et 45 minutes