Interfaces de armazenamento estruturadas
Os serviços de Armazenamento Estruturado são organizados em três categorias de interfaces. Cada conjunto representa um nível sucessivo de indireção ou abstração entre um arquivo composto, os objetos que ele contém e a mídia física na qual esses componentes individuais são armazenados.
A primeira categoria de interfaces consiste em IStorage, IStream e IRootStorage. As duas primeiras interfaces definem como os objetos são armazenados em um arquivo composto. Essas interfaces fornecem métodos para abrir elementos de armazenamento, confirmar e reverter alterações, copiar e mover elementos e ler e gravar fluxos. Essas interfaces não reconhecem os formatos de dados nativos dos objetos individuais e, portanto, não têm métodos para salvar esses objetos no armazenamento persistente. A interface IRootStorage tem um único método para associar um documento composto a um nome de sistema de arquivos subjacente. Os clientes devem implementar essas interfaces para seus arquivos compostos.
A segunda categoria de interfaces consiste nas interfaces IPersist , que os objetos implementam para gerenciar seus dados persistentes. Essas interfaces fornecem métodos para ler os formatos de dados de objetos individuais e, portanto, saber como armazená-los. Os objetos são responsáveis por implementar essas interfaces porque os clientes não conhecem os formatos de dados nativos de seus objetos aninhados. No entanto, essas interfaces não têm conhecimento de mídia de armazenamento físico específica.
Uma terceira categoria consiste em uma única interface, ILockBytes, que fornece métodos para gravar arquivos em mídia física específica, como um disco rígido ou uma unidade de fita. No entanto, a maioria dos aplicativos não implementará a interface ILockBytes porque o COM já fornece implementações para as duas situações mais comuns, que são implementação baseada em arquivo e implementação baseada em memória. O objeto de armazenamento de arquivos composto chama os métodos ILockBytes que você não os chama diretamente na implementação.
Limites de implementação de arquivo composto
A implementação COM da arquitetura de Armazenamento Estruturado é chamada de arquivos compostos. Os objetos de armazenamento, conforme implementado em arquivos compostos, incluem uma implementação das interfaces IPropertyStorage e IPropertySetStorage .
Os ponteiros para a implementação de arquivo composto dessas interfaces são adquiridos chamando a função StgCreateStorageEx para criar um novo objeto de arquivo composto ou StgOpenStorageEx para abrir um arquivo composto criado anteriormente.
Um método alternativo para adquirir um ponteiro para a implementação de arquivo composto dessas interfaces é chamar a função StgCreateDocfile ou StgOpenStorage mais antiga e mais limitada. Todas as quatro funções são tratadas como implementações de arquivo composto.
A implementação de arquivo composto pode ser configurada para usar setores de 512 ou 4096 bytes, conforme definido na estrutura STGOPTIONS .
A implementação de arquivo composto de arquivos compostos está sujeita às restrições de implementação a seguir.
Limite | Arquivo composto |
---|---|
Limites de tamanho do arquivo: | 512: 2 gigabytes (GB) 4096: até limites do sistema de arquivos |
Tamanho máximo do heap necessário para elementos abertos: | 512: 4 megabytes (MB) 4096: até limites de memória virtual |
A raiz simultânea é aberta (abre o mesmo arquivo): | Se STGM_READ e STGM_SHARE_DENY_WRITE forem especificados, os limites serão determinados pelos limites do sistema de arquivos. Caso contrário, há um limite de 20 aberturas de raiz simultâneas do mesmo arquivo. |
Número de elementos em um arquivo: | 512: Ilimitado, mas o desempenho pode degradar se os elementos forem numerados em milhares 4096: Ilimitado |
Devido ao limite de tamanho de heap de 4 MB, o número de elementos abertos no modo transacionado normalmente é limitado a vários milhares de elementos.