Strukturierte Speicherschnittstellen

Strukturierte Speicherdienste sind in drei Kategorien von Schnittstellen unterteilt. Jeder Satz stellt eine aufeinanderfolgende Dereferenzierungs- oder Abstraktionsebene zwischen einer zusammengesetzten Datei, den darin enthaltenen Objekten und den physischen Medien dar, in denen diese einzelnen Komponenten gespeichert sind.

Die erste Kategorie von Schnittstellen besteht aus IStorage, IStream und IRootStorage. Die ersten beiden Schnittstellen definieren, wie Objekte in einer Zusammengesetzten Datei gespeichert werden. Diese Schnittstellen bieten Methoden zum Öffnen von Speicherelementen, zum Committen und Wiederherstellen von Änderungen, zum Kopieren und Verschieben von Elementen sowie zum Lesen und Schreiben von Datenströmen. Diese Schnittstellen erkennen die nativen Datenformate der einzelnen Objekte nicht und verfügen daher über keine Methoden zum Speichern dieser Objekte im persistenten Speicher. Die IRootStorage-Schnittstelle verfügt über eine einzelne Methode zum Zuordnen eines zusammengesetzten Dokuments zu einem zugrunde liegenden Dateisystemnamen. Clients müssen diese Schnittstellen für ihre Verbunddateien implementieren.

Die zweite Kategorie von Schnittstellen besteht aus den IPersist-Schnittstellen , die Objekte implementieren, um ihre persistenten Daten zu verwalten. Diese Schnittstellen bieten Methoden zum Lesen der Datenformate einzelner Objekte und wissen daher, wie diese gespeichert werden. Objekte sind für die Implementierung dieser Schnittstellen verantwortlich, da Clients die nativen Datenformate ihrer geschachtelten Objekte nicht kennen. Diese Schnittstellen haben jedoch keine Kenntnis von bestimmten physischen Speichermedien.

Eine dritte Kategorie besteht aus einer einzelnen Schnittstelle, ILockBytes, die Methoden zum Schreiben von Dateien auf bestimmte physische Medien wie eine Festplatte oder ein Bandlaufwerk bereitstellt. Die meisten Anwendungen implementieren die ILockBytes-Schnittstelle jedoch nicht, da COM bereits Implementierungen für die beiden häufigsten Situationen bereitstellt, nämlich die dateibasierte Implementierung und die speicherbasierte Implementierung. Das Verbunddateispeicherobjekt ruft die ILockBytes-Methoden auf, die Sie nicht direkt in der Implementierung aufrufen.

Grenzwerte für die Implementierung von Zusammengesetzten Dateien

Die COM-Implementierung der Architektur des strukturierten Speichers wird als Verbunddateien bezeichnet. Speicherobjekte, wie sie in Verbunddateien implementiert sind, enthalten eine Implementierung der Schnittstellen IPropertyStorage und IPropertySetStorage .

Zeiger auf die Verbunddateiimplementierung dieser Schnittstellen werden abgerufen, indem die StgCreateStorageEx-Funktion aufgerufen wird, um ein neues Verbunddateiobjekt zu erstellen, oder StgOpenStorageEx , um eine zuvor erstellte Verbunddatei zu öffnen.

Eine alternative Methode zum Abrufen eines Zeigers auf die Verbunddateiimplementierung dieser Schnittstellen ist das Aufrufen der älteren und eingeschränkteren StgCreateDocfile - oder StgOpenStorage-Funktion . Alle vier Funktionen werden als Verbunddateiimplementierungen behandelt.

Die Verbunddateiimplementierung kann so konfiguriert werden, dass 512- oder 4096-Byte-Sektoren verwendet werden, wie in der STGOPTIONS-Struktur definiert.

Die Implementierung zusammengesetzter Dateien unterliegt den folgenden Implementierungseinschränkungen.

Begrenzung Verbunddatei
Dateigrößenbeschränkungen: 512: 2 Gb (GB) 4096: Maximal zulässige Dateisystemgrenzwerte
Maximale Heapgröße, die für geöffnete Elemente erforderlich ist: 512: 4 Megabyte (MB) 4096: Maximal zulässige Grenzwerte für virtuellen Arbeitsspeicher
Gleichzeitiger Stamm wird geöffnet (öffnet dieselbe Datei): Wenn STGM_READ und STGM_SHARE_DENY_WRITE angegeben sind, werden Grenzwerte durch die Dateisystemgrenzwerte festgelegt. Andernfalls gilt ein Grenzwert von 20 gleichzeitigen Stammöffnen derselben Datei.
Anzahl der Elemente in einer Datei: 512: Unbegrenzt, aber die Leistung kann beeinträchtigt werden, wenn Elemente in den Tausendern 4096: Unbegrenzt

Aufgrund des Heapgrößenlimits von 4 MB ist die Anzahl geöffneter Elemente im Transaktionsmodus in der Regel auf mehrere Tausend Elemente beschränkt.