Paging der Cross-Reference-Map

Wächst die Cross-Reference-Map eines Dokuments über THotPDF.XRefMapPagingThreshold-Einträge hinaus (Standard 250000, als dichtes Array rund 8 MB), packt der Load-complete-Durchlauf sie in einen THPDFXRefMapPager und gibt das dichte Array frei, sodass große Dokumente nicht länger jeden Eintrag in einer ausgerichteten Record-Map vorhalten

THPDFXRefMapPager

Der Pager speichert einen sortierten Snapshot gepackter 24-Byte-Slots (THPDFXRefMapSlot): Objektnummer, Eintragstyp, 16-Bit-Generation, Offset und Object-Stream-Position. GetEntry antwortet per Binärsuche durch eine kleine, LRU-materialisierte Seite mit 64 Einträgen, sodass sequenzielle Nachschlagen eine Seite für viele Einträge dekodieren; CollectFreeEntries extrahiert die freie Menge in Objektnummern-Reihenfolge für den Rebuild bei inkrementellen Updates

Diagnostik und Consumer

GetLoadedXRefMapPaged meldet den Paging-Zustand mit Eintragsanzahl, Snapshot-Bytes und Window-Hit- bzw. Miss-Zählern; der Free-Set-Rebuild beim inkrementellen Speichern und die indirekte /Length-Auflösung lazy materialisierter Stream-Member laufen über den Pager, und ein Schwellwert von 0 schaltet Paging vollständig ab