Freigeben über


Implementieren der verzögerten Garbage Collection

Letzte Änderung: Donnerstag, 1. Oktober 2009

Gilt für: SharePoint Foundation 2010

Wenn SharePoint Foundation keinen Verweis mehr auf eine BLOB-Datei im externen BLOB-Speicher aufbewahrt (einschließlich aktive Dokumente, ältere Versionen und Papierkorbdokumente), können Sie die verwaiste Datei löschen. Dazu können Sie die Garbage Collection (automatische Speicherbereinigung) für verwaiste BLOBs immer dann ausführen, wenn der Anteil der verwaisten Dateien im externen BLOB-Speicher den für Ihre Anwendung akzeptablen Grenzwert übersteigt.

Verzögerte Garbage Collection

Im Folgenden wird beschrieben, welche Schritte Sie ausführen müssen, um bei Verwendung des ESB-Anbieters die Garbage Collection für den externen BLOB-Speicher zu implementieren. In einigen der Schritte werden Beispielcodeausschnitte bereitgestellt, die spezielle Aufgaben veranschaulichen. Allerdings sind die Codebeispiele vereinfacht, und es wird dabei von folgenden Annahmen ausgegangen:

  • Externe BLOB-Dateien für eine gegebene Website sind in einem Verzeichnis gespeichert.

  • Die Liste passt in eine In-Memory-Hashtabelle.

  • Während der Ausführung der Garbage Collection werden keine neuen BLOBs erstellt.

Diese Annahmen treffen möglicherweise nicht für Ihre Website zu. Sie sollten aber in der Lage sein, die Beispiele an Ihre speziellen Anforderungen anzupassen.

Wichtiger HinweisWichtig

Bitte befolgen Sie diese Schritte in der angegebenen Reihenfolge. Andernfalls kann es zu problematischen Racebedingungen kommen.

So implementieren Sie die Garbage Collection für den externen BLOB-Speicher

  1. Listen Sie alle BLOB-Dateien im EBS-Anbieter-Namespace auf, der einem gegebenen SPSite-Bezeichner entspricht. Fügen Sie diese BLOB-Dateien einer Hashtabelle hinzu.

    String dirName = Utility.DirFromSiteId(site.ID);
    FileInfo[] files = Directory.GetFiles(dirName);
    foreach (FileInfo file in files)
    {
        ht.Add(file.Name, file);
    }
    
  2. Suchen Sie alle Dokumente in der Inhaltsdatenbank heraus, die dem SPSite-Bezeichner entspricht. Entfernen Sie diese Einträge aus der Hashtabelle.

    foreach (SPExternalBinaryId blobid in site.ExternalBinaryIds)
      {
        String fileName = Utility.FileFromBlobid(blobid);
            if (ht.Contains(fileName))
            {
                ht.Remove(fileName);
            }
      }
    
  3. Einträge, die in der Hashtabelle verbleiben, sind Dateien im externen BLOB-Speicher, für die keine entsprechenden Dateien in der Inhaltsdatenbank vorhanden sind. Es handelt sich um verwaiste Dateien, die Sie löschen können.

    foreach (FileInfo file in ht.Values)
      {
          file.Delete();
      }
    

Siehe auch

Konzepte

Löschen von verwaisten BLOBs aus dem externen Datenspeicher

Externer Speicher für BLOBs (Binary Large Objects) in SharePoint Foundation

Weitere Ressourcen

ILockBytes