Freigegebene Seitenobjektdiagramme

Große sequenzielle Aufträge können nach jeder Seite saubere seitenbesessene Objektdiagramme verwerfen und zugleich genügend Quellmetadaten behalten, um die Seite bei Bedarf erneut zu materialisieren

Freigabegrenze

ReleaseLoadedPageObjectGraph gibt die ausgewählte indirekte Seitenwurzel und die direkt besessenen verschachtelten Objekte darunter frei

Die Traversierung folgt keinen indirekten Verknüpfungen, daher bleiben gemeinsame Schriften, Bilder, Ressourcendictionaries, Seitendiagrammknoten und andere seitenübergreifende Objekte im Besitz des geladenen Dokuments

Seitenspezifische Einträge in Display-Listen und Rastercaches werden an derselben Grenze entfernt

Sicherheit und Aufbewahrung

Veränderte, schreibpflichtige, aktive oder anderweitig nicht erneut ladbare Seiten bleiben erhalten und werden gemeldet, statt verworfen zu werden

Direkte dateigestützte Seitenwurzeln werden über ihren validierten Cross-Reference-Offset erneut geladen, während komprimierte Wurzeln über den indizierten Mitgliedspfad des Objektstreams erneut geladen werden

Aus Streams geladene oder verschlüsselte gewöhnliche Wurzeln ohne unabhängig wiederholbare Quelle bleiben im Speicher

Sequenzielle Verarbeitung

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

Ein Regressions-Fixture mit 100.000 Seiten erreicht unter Win32 maximal 69,3 MiB, zeigt kein stetiges Wachstum und materialisiert anschließend eine freigegebene Seite mit ihrer ursprünglichen Objektnummer und ihren Seitenrahmen erneut

Nebenläufigkeit

Der Zugriff auf das Objektdiagramm geladener Dokumente bleibt vom Aufrufer serialisiert

Geben Sie eine Seite nicht frei, während ein anderer Thread dieselbe Dokumentinstanz rendert, untersucht oder verändert

Siehe auch: ReleaseLoadedPageObjectGraph, GetLoadedPageObjectGraphReleaseStatistics, THPDFPageObjectGraphReleaseStatistics, Lazy Page-Tree Loading, Bounded Object-Stream Cache