Graphes d'objets de page libérés

Les grands travaux séquentiels peuvent écarter les graphes d'objets de page propres après chaque page tout en conservant assez de métadonnées de source pour matérialiser à nouveau la page à la demande

Frontière de libération

ReleaseLoadedPageObjectGraph libère la racine de page indirecte sélectionnée et les objets imbriqués possédés directement en dessous de celle-ci

La traversée ne suit pas les liens indirects, de sorte que les polices, images, dictionnaires de ressources, nœuds d'arbre de pages et autres objets inter-pages partagés restent possédés par le document chargé

Les entrées de liste d'affichage et raster spécifiques à la page sont évincées à la même frontière

Sécurité et conservation

Les pages modifiées, à écrire obligatoirement, actives ou autrement non rechargables sont conservées et signalées au lieu d'être écartées

Les racines de page adossées à un fichier se rechargent depuis leur décalage de références croisées validé, tandis que les racines compressées se rechargent via le chemin de membre de flux d'objets indexé

Les racines ordinaires chargées par flux ou chiffrées sans source rejouable indépendamment restent résidentes

Traitement séquentiel

for PageIndex := 0 to PDF.LoadedPageCount - 1 do
begin
  ProcessLoadedPage(PDF, PageIndex);
  PDF.ReleaseLoadedPageObjectGraph(PageIndex);
end;

Une fixture de régression de 100 000 pages plafonne à 69,3 Mio sur Win32, ne montre aucune croissance en régime permanent, puis rematérialise une page libérée avec son numéro d'objet et ses boîtes de page d'origine

Concurrence

L'accès au graphe de document chargé reste sérialisé par l'appelant

Ne libérez pas une page pendant qu'un autre thread rend, inspecte ou modifie la même instance de document

Voir aussi : ReleaseLoadedPageObjectGraph, GetLoadedPageObjectGraphReleaseStatistics, THPDFPageObjectGraphReleaseStatistics, Chargement paresseux d'arbre de pages, Cache de flux d'objets borné