Implémenter le nettoyage de la mémoire différé
Dernière modification : jeudi 1 octobre 2009
S’applique à : SharePoint Foundation 2010
Lorsque SharePoint Foundation ne détient plus de référence à un fichier BLOB dans le magasin de données BLOB externe (notamment les documents actifs, les anciennes versions et les documents de la Corbeille), vous pouvez supprimer le fichier orphelin. À cette fin, vous pouvez exécuter le nettoyage de la mémoire sur des objets BLOB orphelins chaque fois que la proportion de fichiers orphelins dans le magasin de données BLOB externe dépasse les limites acceptables pour votre application.
Nettoyage de la mémoire différé
Vous devez effectuer les étapes indiquées plus loin pour implémenter le nettoyage de la mémoire dans le magasin de données BLOB externe lors de l'utilisation du fournisseur EBS. Plusieurs de ces étapes fournissent des extraits d'exemple de code illustrant des tâches spécifiques. Toutefois, les exemples de code sont simplifiés et reposent sur les hypothèses suivantes :
Les fichiers BLOB externes pour un site donné sont stockés dans un répertoire.
La liste contient dans une table de hachage en mémoire.
Aucun nouvel objet BLOB n'est créé pendant l'exécution du nettoyage de la mémoire.
Même si ces hypothèses ne s'appliquent pas nécessairement à votre site, vous devez être en mesure d'adapter les exemples à votre propre situation.
Important
Vous devez suivre ces étapes dans l'ordre indiqué afin de ne pas créer de conditions de concurrence critique problématiques.
Pour implémenter le nettoyage de la mémoire pour le magasin de données BLOB externe
Énumérez tous les fichiers BLOB dans l'espace de noms de fournisseur EBS correspondant à un identificateur SPSite donné. Ajoutez ces fichiers BLOB à une table de hachage.
String dirName = Utility.DirFromSiteId(site.ID); FileInfo[] files = Directory.GetFiles(dirName); foreach (FileInfo file in files) { ht.Add(file.Name, file); }
Recherchez tous les documents dans la base de données de contenu qui correspond à l'identificateur SPSite. Supprimez ces entrées de la table de hachage.
foreach (SPExternalBinaryId blobid in site.ExternalBinaryIds) { String fileName = Utility.FileFromBlobid(blobid); if (ht.Contains(fileName)) { ht.Remove(fileName); } }
Les entrées restantes dans la table de hachage sont des fichiers du magasin de données BLOB externe auxquels ne correspondent pas de fichiers dans la base de données de contenu. Il s'agit de fichiers orphelins que vous pouvez supprimer.
foreach (FileInfo file in ht.Values) { file.Delete(); }
Voir aussi
Concepts
Supprimer des objets BLOB orphelins du magasin de données externe
Stockage externe des objets BLOB (Binary Large Objects) dans SharePoint Foundation