Frigivna sidobjektgrafer

Stora sekventiella jobb kan kassera rena sidägda objektgrafer efter varje sida samtidigt som tillräcklig källmetadata behålls för att materialisera sidan igen vid behov

Frigivningsgräns

ReleaseLoadedPageObjectGraph frigör den valda indirekta sidroten och de direkt ägda nästlade objekten nedanför den

Genomgången följer inte indirekta länkar, så delade teckensnitt, bilder, resursordlistor, sidträdsnoder och andra objektsöverskridande objekt förblir ägda av det inlästa dokumentet

Sidspecifika display-list- och rasterposter avlägsnas vid samma gräns

Säkerhet och bibehållande

Smutsiga, måste-skriva, aktiva eller på annat sätt icke-omladdningsbara sidor behålls och rapporteras i stället för att kasseras

Direkta filbackade sidrötter läses om från deras validerade korsreferensoffset, medan komprimerade rötter läses om genom den indexerade objektströmsmedlemssökvägen

Ströminlästa eller krypterade vanliga rötter utan en oberoende upprepningsbar källa förblir residenta

Sekventiell bearbetning

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

Ett 100 000-sidigt regressionsexempel når en topp på 69,3 MiB på Win32, visar ingen steady-state-tillväxt och materialiserar sedan om en frigiven sida med dess ursprungliga objektnummer och sidrutor

Samtidighet

Inläst-dokumentgrafåtkomst förblir anroparserialiserad

Frigör inte en sida medan en annan tråd renderar, inspekterar eller muterar samma dokumentinstans

Se även: ReleaseLoadedPageObjectGraph, GetLoadedPageObjectGraphReleaseStatistics, THPDFPageObjectGraphReleaseStatistics, Lat sidträdsinläsning, Avgränsad objektströmscache