AcroForm-relatiecache

HotPDF onderhoudt een documentlocale bidirectionele index over terminale AcroForm-velden, gekwalificeerde veldnamen, widget-annotaties, widget-ordinals en paginaposities

Opzoekgedrag

Veldindex- en gekwalificeerde-naam-opzoeking gebruiken na de eerste opbouw directe arrays en een hoofdlettergevoeligheid negerende open-addressed naammap

Een ouder-veld kan overgeërfde /FT-, /Ff- en /Opt-invoeren leveren zonder zelf een terminaal veld te zijn; benoemde kinderen zoals group.a en group.b blijven aparte geïndexeerde velden

Benoemde kindvelden worden onderscheiden van onbenoemde widgetkinderen, of het veld en de widget nu één woordenlijst delen of aparte woordenlijsten gebruiken

GetLoadedFormFieldWidgetPageIndex lost één widget-ordinal op naar zijn pagina, terwijl GetLoadedFormFieldIndexForAnnotation een pagina-annotatie terugkaart naar zijn veld en widget-ordinal

Lidmaatschap van de annotatiearray gaat vóór een /P-invoer van de widget, en bij misvormd dubbel lidmaatschap wint de eerste passende pagina in documentvolgorde

Widgets die in /AcroForm /Fields ontbreken worden als wees geïndexeerd voor diagnostiek, maar worden niet als synthetische formuliervelden blootgesteld

Opbouw en mutatie

De cache wordt lui opgebouwd met één doorgang door de veldboom plus één doorgang door de pagina-annotaties

Het aanmaken van geladen velden breidt een geldige cache incrementeel uit, terwijl veldverwijdering, hernoeming, widgetverplaatsing, annotatieverwijdering, merge-registratie, XFA-veldsamenvoeging en paginatabelmutaties de cache ongelen voordat de graaf verandert

De volgende relatiequery bouwt opnieuw op vanuit de huidige objectgraaf, inclusief widgets zonder /P-invoer

Het verwijderen van één terminaal kind verwijdert zijn eigen widgets en zijn veldboom-invoer, terwijl de broertjes/zussen en hun overgeërfde instellingen behouden blijven

Roep InvalidateLoadedFormRelationshipCache aan nadat je via ruwe object-API's AcroForm-, veld-, widget-, pagina-/Annots-, /Parent-, /Kids- of /P-woordenlijsten hebt gewijzigd

Prestaties en eigendom

De naam- en objectmappen houden hun load factor onder de helft en bieden warme opzoeking in verwachte constante tijd

Een regressiepoort bouwt 10.000 geladen velden, bewijst de lineaire doorgangstelemetrie en eist dat herhaalde naamopzoeking op Win32 en Win64 minstens 100 keer sneller is dan een koude opbouw plus opzoeking

De cache bewaart niet-eigenende objectverwijzingen en de toegang tot de geladen-document-graaf blijft door de aanroeper geserialiseerd

Zie ook: GetLoadedFormFieldWidgetPageIndex, GetLoadedFormFieldIndexForAnnotation, InvalidateLoadedFormRelationshipCache, GetLoadedFormRelationshipCacheStatistics