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