实现惰性垃圾收集
上次修改时间: 2009年10月1日
适用范围: SharePoint Foundation 2010
当 SharePoint Foundation 不再在外部 BLOB 存储(包括活动文档、旧版本和回收站文档)中保存对 BLOB 文件的引用时,您可以删除孤立的文件。为了支持此操作,只要外部 BLOB 存储中的孤立文件比例超过您应用程序的实际限制,就可以对孤立的 BLOB 运行垃圾收集。
惰性垃圾收集
下面是使用 EBS 提供程序对外部 BLOB 存储实现垃圾收集时应该采取的步骤。有几个步骤提供了示例代码段来演示特定的任务。但是,代码示例已经过简化并假设存在以下情况:
给定网站的外部 BLOB 文件存储在目录中。
列表适合内存中的哈希表。
垃圾收集正在运行时,不会创建任何新的 BLOB。
尽管这些假设可能不适用于您的网站,但您应该能够根据您的特殊情况调整这些示例。
重要信息 |
---|
应按照所示顺序执行这些步骤,否则可能会导致有问题的竞争条件。 |
对外部 BLOB 存储实现垃圾收集
枚举与给定 SPSite 标识符相对应的 EBS 提供程序命名空间中的所有 BLOB 文件。将这些 BLOB 文件添加到哈希表。
String dirName = Utility.DirFromSiteId(site.ID); FileInfo[] files = Directory.GetFiles(dirName); foreach (FileInfo file in files) { ht.Add(file.Name, file); }
找到与 SPSite 标识符相对应的内容数据库中的所有文档。从哈希表中删除这些条目。
foreach (SPExternalBinaryId blobid in site.ExternalBinaryIds) { String fileName = Utility.FileFromBlobid(blobid); if (ht.Contains(fileName)) { ht.Remove(fileName); } }
保留在该哈希表中的条目就是外部 BLOB 存储中存在,但在内容数据库中没有相应文件的文件。这些是孤立文件,可将其删除。
foreach (FileInfo file in ht.Values) { file.Delete(); }
请参阅
概念
SharePoint Foundation 中二进制大型对象 (BLOB) 的外部存储