Поделиться через


Интерфейсы структурированного хранилища

Службы структурированного хранилища организованы в три категории интерфейсов. Каждый набор представляет собой последовательный уровень косвенного обращения или абстракции между составным файлом, содержащимися в нем объектами и физическим носителем, на котором хранятся эти отдельные компоненты.

Первая категория интерфейсов состоит из IStorage, IStream и IRootStorage. Первые два интерфейса определяют, как объекты хранятся в составном файле. Эти интерфейсы предоставляют методы для открытия элементов хранилища, фиксации и отмены изменений, копирования и перемещения элементов, а также чтения и записи потоков. Эти интерфейсы не распознают собственные форматы данных отдельных объектов и, следовательно, не имеют методов для сохранения этих объектов в постоянное хранилище. Интерфейс IRootStorage имеет один метод для связывания составного документа с именем базовой файловой системы. Клиенты должны реализовать эти интерфейсы для своих составных файлов.

Вторая категория интерфейсов состоит из интерфейсов IPersist , которые объекты реализуют для управления своими постоянными данными. Эти интерфейсы предоставляют методы для чтения форматов данных отдельных объектов и, следовательно, знают, как их хранить. Объекты отвечают за реализацию этих интерфейсов, так как клиенты не знают собственные форматы данных своих вложенных объектов. Однако эти интерфейсы не обладают знаниями о конкретных физических носителях.

Третья категория состоит из одного интерфейса ILockBytes, который предоставляет методы записи файлов на определенный физический носитель, например на жесткий диск или ленточный накопитель. Однако большинство приложений не реализуют интерфейс ILockBytes , так как COM уже предоставляет реализации для двух наиболее распространенных ситуаций: реализация на основе файлов и реализация на основе памяти. Составной объект хранилища файлов вызывает методы ILockBytes , которые не вызываются непосредственно в реализации.

Ограничения реализации составных файлов

Com-реализация архитектуры структурированного хранилища называется составной файлами. Объекты хранения, реализованные в составных файлах, включают реализацию интерфейсов IPropertyStorage и IPropertySetStorage .

Указатели на реализацию составного файла этих интерфейсов получаются путем вызова функции StgCreateStorageEx для создания нового объекта составного файла или StgOpenStorageEx для открытия ранее созданного составного файла.

Альтернативным способом получения указателя на реализацию составного файла этих интерфейсов является вызов более старой и более ограниченной функции StgCreateDocfile или StgOpenStorage . Все четыре функции рассматриваются как составные реализации файлов.

В реализации составного файла можно настроить использование секторов 512 или 4096 байт, как определено в структуре STGOPTIONS .

Реализация составного файла составных файлов подвержена следующим ограничениям реализации.

Ограничение Составной файл
Ограничения на размер файла: 512: 2 гигабайта (ГБ) 4096: ограничения файловой системы
Максимальный размер кучи, необходимый для открытых элементов: 512: 4 мб (МБ) 4096: до ограничения виртуальной памяти
Открывается параллельный корневой каталог (открывается один и тот же файл): Если указаны STGM_READ и STGM_SHARE_DENY_WRITE, ограничения определяются ограничениями файловой системы. В противном случае существует ограничение в 20 параллельных корневых открытий одного и того же файла.
Количество элементов в файле: 512: не ограничено, но производительность может снизиться, если число элементов в тысячах 4096: Без ограничений

Из-за ограничения размера кучи в 4 МБ количество открытых элементов в режиме транзакций обычно ограничивается несколькими тысячами элементов.