Vrijgegeven pagina-objectgrafen

Grote sequentiële taken kunnen schone pagina-eigendom-objectgrafen na elke pagina weggooien, terwijl voldoende bronmetadata wordt behouden om de pagina op verzoek opnieuw te materialiseren

Vrijgavegrens

ReleaseLoadedPageObjectGraph geeft de geselecteerde indirecte pagina-root en de direct-eigendom geneste objecten eronder vrij

De traversal volgt geen indirecte koppelingen, zodat gedeelde lettertypes, afbeeldingen, resourcewoordenboeken, paginaboom-knooppunten en andere cross-pagina-objecten in eigendom van het geladen document blijven

Pagina-specifieke display-list- en rasteritems worden op dezelfde grens verdreven

Veiligheid en behoud

Vieze, must-write-, actieve of anderszins niet-opnieuw-laadbare pagina's worden behouden en gerapporteerd in plaats van weggegooid

Direct-bestands-ondersteunde pagina-roots herladen vanuit hun gevalideerde cross-reference-offset, terwijl gecomprimeerde roots herladen via het geïndexeerde objectstroom-lidpad

Stream-geladen of versleutelde gewone roots zonder een onafhankelijk afspeelbare bron blijven resident

Sequentiële verwerking

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

Een regressiefixture met 100.000 pagina's piekt op 69,3 MiB op Win32, toont geen steady-state-groei en rematerialiseert vervolgens een vrijgegeven pagina met zijn oorspronkelijke objectnummer en paginakaders

Concurrentie

Geladen-document-graaftoegang blijft geserialiseerd door de aanroeper

Geef een pagina niet vrij terwijl een andere thread dezelfde documentinstantie weergeeft, inspecteert of muteert

Zie ook: ReleaseLoadedPageObjectGraph, GetLoadedPageObjectGraphReleaseStatistics, THPDFPageObjectGraphReleaseStatistics, Luie paginatree-lading, Begrensde objectstroom-cache